Pregunta

Estoy compilando un simple .c en visual c con Compile as C Code (/TC) y obtengo este error del compilador

error C2143:error de sintaxis :desaparecido ';' antes de 'tipo'

en una línea que requiere una estructura simple

 struct foo test;

Lo mismo ocurre con el uso del typedef de la estructura.

error C2275:'FOO':uso ilegal de este tipo como expresión

¿Fue útil?

Solución

Olvidé que en C tienes que declarar todas tus variables antes de cualquier código.

Otros consejos

¿Omitiste accidentalmente un punto y coma en una línea anterior?Si la línea anterior es una #include, es posible que tengas que buscar en otra parte el punto y coma que falta.

Editar:Si el resto de su código es C++ válido, entonces probablemente no haya suficiente información para determinar cuál es el problema.Quizás podrías publicar tu código en un pastilla para que podamos verlo todo.

Idealmente, en el proceso de hacerlo más pequeño para publicarlo, de repente comenzará a funcionar y entonces habrás descubierto el problema.

Como ya creaste un typedef para la estructura (porque usaste la versión 's1'), debes escribir:

foo test;

en vez de

struct foo test;

Eso funcionará tanto en C como en C++.

¿Cómo se define su tipo de estructura?Hay dos maneras de hacerlo:

// 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 básicamente dice que el compilador obtuvo un token que considera ilegal en el contexto actual.Una de las implicaciones de este error es que el problema real puede existir antes de la línea que desencadena el error del compilador.Como dijo Greg, creo que necesitamos ver más de su código para diagnosticar este problema.

Tampoco estoy seguro de por qué cree que el hecho de que este sea un código C++ válido sea útil al intentar descubrir por qué no se compila como C.C++ es (en gran medida) un superconjunto de C, por lo que hay varias razones por las que un código C++ válido podría no ser un código C sintácticamente correcto, ¡entre ellas que C++ trata las estructuras como clases!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top