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

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top