Erro do compilador C2143 ao usar uma estrutura
-
09-06-2019 - |
Pergunta
Estou compilando um .c simples em C ++ visual com compilação como código c (/tc) e recebo este erro do compilador
erro C2143:erro de sintaxe :ausente ';' antes de 'tipo'
em uma linha que exige uma estrutura simples
struct foo test;
o mesmo vale para usar o typedef da estrutura.
erro C2275:'FOO':uso ilegal deste tipo como expressão
Solução
Esqueci que em C você tem que declarar todas as suas variáveis antes de qualquer código.
Outras dicas
Você omitiu acidentalmente um ponto e vírgula em uma linha anterior?Se a linha anterior for um #include
, talvez seja necessário procurar em outro lugar o ponto e vírgula ausente.
Editar:Se o restante do seu código for C++ válido, provavelmente não haverá informações suficientes para determinar qual é o problema.Talvez você possa postar seu código em um pasta para que possamos ver tudo.
Idealmente, no processo de diminuir o tamanho para postar, ele começará a funcionar de repente e você terá descoberto o problema!
Como você já criou um typedef para a estrutura (porque usou a versão 's1'), você deve escrever:
foo test;
em vez de
struct foo test;
Isso funcionará em C e C++
Como o seu tipo de estrutura é definido?Existem duas maneiras de fazer isso:
// This will define a typedef for S1, in both C and in C++
typedef struct {
int data;
int text;
} S1;
// This will define a typedef for S2 ONLY in C++, will create error in C.
struct S2 {
int data;
int text;
};
C2143 basicamente diz que o compilador recebeu um token que considera ilegal no contexto atual.Uma das implicações desse erro é que o problema real pode existir antes da linha que aciona o erro do compilador.Como Greg disse, acho que precisamos ver mais do seu código para diagnosticar esse problema.
Também não sei por que você acha que o fato de este código C++ válido ser útil ao tentar descobrir por que ele não é compilado como C?C++ é (em grande parte) um superconjunto de C, portanto, há vários motivos pelos quais o código C++ válido pode não ser um código C sintaticamente correto, principalmente porque o C++ trata estruturas como classes!