Ошибка компилятора C2143 при использовании структуры - PullRequest
2 голосов
/ 30 августа 2008

Я собираю простой .c в Visual C ++ с компилировать как код C (/ TC) и я получаю эту ошибку компилятора

ошибка C2143: синтаксическая ошибка: отсутствует ';' перед «тип»

в строке, которая вызывает простую структуру

 struct foo test;

То же самое касается использования typedef структуры.

ошибка C2275: 'FOO': незаконное использование этого типа в качестве выражения

Ответы [ 5 ]

6 голосов
/ 30 августа 2008

Я забыл, что в C вы должны объявить все свои переменные перед любым кодом.

1 голос
/ 30 августа 2008

Поскольку вы уже сделали typedef для структуры (поскольку вы использовали версию 's1'), вы должны написать:

foo test;

вместо

struct foo test;

Это будет работать как на C, так и на C ++

1 голос
/ 30 августа 2008

Вы случайно пропустили точку с запятой в предыдущей строке? Если предыдущей строкой является #include, возможно, вам придется искать пропущенную точку с запятой в другом месте.

Редактировать: Если остальная часть вашего кода является допустимой C ++, то, вероятно, недостаточно информации, чтобы определить, в чем проблема. Возможно, вы могли бы разместить свой код на pastebin , чтобы мы могли увидеть все это.

В идеале, в процессе уменьшения его размера для публикации, он внезапно начнет работать, и вы обнаружите проблему!

0 голосов
/ 30 августа 2008

C2143 в основном говорит, что компилятор получил токен, который он считает недопустимым в текущем контексте. Одним из следствий этой ошибки является то, что реальная проблема может существовать до строки, которая вызывает ошибку компилятора. Как сказал Грег, я думаю, что мы должны увидеть больше вашего кода для диагностики этой проблемы.

Я также не уверен, почему вы считаете, что это допустимый код C ++, полезен при попытке выяснить, почему он не компилируется как C? C ++ (в значительной степени) является надмножеством C, поэтому существует ряд причин, по которым действительный код C ++ может не быть синтаксически правильным кодом C, не в последнюю очередь то, что C ++ рассматривает структуры как классы!

0 голосов
/ 30 августа 2008

Как определяется тип вашей структуры? Есть два способа сделать это:

// 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; 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...