Domanda

Sto compilando un semplice .C in Visual C ++ con compilazione come codice C (/TC) e ottengo questo errore del compilatore

errore C2143:Errore di sintassi :mancante ';' Prima di 'tipo'

su una riga che richiede una struttura semplice

 struct foo test;

lo stesso vale per l'utilizzo del typedef della struttura.

errore C2275:'PIPPOO':uso illegale di questo tipo come espressione

È stato utile?

Soluzione

Ho dimenticato che in C devi dichiarare tutte le tue variabili prima di qualsiasi codice.

Altri suggerimenti

Hai omesso accidentalmente un punto e virgola in una riga precedente?Se la riga precedente è un #include, potresti dover cercare altrove il punto e virgola mancante.

Modificare:Se il resto del codice è C++ valido, probabilmente non ci sono informazioni sufficienti per determinare qual è il problema.Forse potresti pubblicare il tuo codice su a pastebin così possiamo vedere il tutto.

Idealmente, nel processo di rimpicciolimento da pubblicare, inizierà improvvisamente a funzionare e avrai scoperto il problema!

Poiché hai già creato un typedef per la struttura (perché hai utilizzato la versione 's1'), dovresti scrivere:

foo test;

piuttosto che

struct foo test;

Funzionerà sia in C che in C++

Come viene definita la tipologia della vostra struttura?Ci sono due modi per farlo:

// 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 sostanzialmente dice che il compilatore ha ottenuto un token che ritiene illegale nel contesto attuale.Una delle implicazioni di questo errore è che il problema effettivo potrebbe esistere prima della riga che attiva l'errore del compilatore.Come ha detto Greg, penso che abbiamo bisogno di vedere più codice per diagnosticare questo problema.

Inoltre, non sono sicuro del motivo per cui ritieni che il fatto che questo sia un codice C++ valido sia utile quando cerchi di capire perché non viene compilato come C?C++ è (in gran parte) un superset di C quindi ci sono diversi motivi per cui un codice C++ valido potrebbe non essere un codice C sintatticamente corretto, non ultimo il fatto che C++ tratta le strutture come classi!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top