Posted by: Jefferson
« on: April 11, 2019, 03:57:43 PM »Até onde pude entender, o objetivo do exercício é isolar funções e tipos relativos a um determinado dado em arquivos distintos e separados do principal. Isso parece simples, mas sem ter uma razoável compreensão de como a coisa toda funciona tentar fazer isso pode ser extremamente frustrante por causa de novas mensagens de erro que não são nada intuitivas.
Por exemplo, após mover a struct para outro arquivo a seguinte declaração não funciona mais em main.cpp:
Taluno * ptrAlunos= new Taluno;
Acusa os erros:
[Error] invalid use of incomplete type 'struct Taluno'
[Error] forward declaration of 'struct Taluno'
Já esta aqui funciona (desde que a função aluno_criar() já exista, claro):
Taluno * ptrAlunos= aluno_criar();
Depois que você entende de onde vem o erro percebe que apesar de "Taluno" ser aceito pelo compilador, "new Taluno" só pode ocorrer no mesmo arquivo onde a struct Taluno foi declarada. O compilador sabe o que é Taluno (aparentemente por causa da declaração typedef) mas não sabe do que ele é feito, daí o "incomplete". Eu confesso que ainda não entendi realmente como a coisa funciona. Só consegui consertar atrav´és de tentativa e erro, comparando com o exemplo dado pelo professor.
Para quem entende inglês, este texto parece ser bem esclarecedor.
Por exemplo, após mover a struct para outro arquivo a seguinte declaração não funciona mais em main.cpp:
Taluno * ptrAlunos= new Taluno;
Acusa os erros:
[Error] invalid use of incomplete type 'struct Taluno'
[Error] forward declaration of 'struct Taluno'
Já esta aqui funciona (desde que a função aluno_criar() já exista, claro):
Taluno * ptrAlunos= aluno_criar();
Depois que você entende de onde vem o erro percebe que apesar de "Taluno" ser aceito pelo compilador, "new Taluno" só pode ocorrer no mesmo arquivo onde a struct Taluno foi declarada. O compilador sabe o que é Taluno (aparentemente por causa da declaração typedef) mas não sabe do que ele é feito, daí o "incomplete". Eu confesso que ainda não entendi realmente como a coisa funciona. Só consegui consertar atrav´és de tentativa e erro, comparando com o exemplo dado pelo professor.
Para quem entende inglês, este texto parece ser bem esclarecedor.