Ошибка компилятора C2143 при использовании структуры
-
09-06-2019 - |
Вопрос
Я собираю простой .c в Visual C ++ с компилировать как код C (/ TC) и я получаю эту ошибку компилятора
ошибка C2143: синтаксическая ошибка: отсутствует ';' перед "типом"
в строке, которая требует простой структуры
struct foo test;
То же самое касается использования typedef структуры.
ошибка C2275: 'FOO': незаконное использование этого типа в качестве выражения
Решение
Я забыл, что в C вы должны объявлять все свои переменные перед любым кодом.
Другие советы
Вы случайно пропустили точку с запятой в предыдущей строке? Если предыдущая строка является #include
, возможно, вам придется искать пропущенную точку с запятой в другом месте.
Редактировать: если остальная часть вашего кода является допустимой C ++, то, вероятно, недостаточно информации, чтобы определить, в чем проблема. Возможно, вы могли бы опубликовать свой код на pastebin , чтобы мы могли увидеть все это.
В идеале, в процессе уменьшения его размера для публикации он внезапно начнет работать, и вы обнаружите проблему!
Поскольку вы уже сделали typedef для структуры (поскольку вы использовали версию 's1'), вы должны написать:
foo test;
а не
struct foo test;
Это будет работать как на C, так и на C ++
Как определяется тип вашей структуры? Есть два способа сделать это:
// 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 в основном говорит, что компилятор получил токен, который он считает недопустимым в текущем контексте. Одним из следствий этой ошибки является то, что реальная проблема может существовать до строки, которая вызывает ошибку компилятора. Как сказал Грег, я думаю, что мы должны увидеть больше вашего кода для диагностики этой проблемы.
Я также не уверен, почему вы думаете, что тот факт, что это допустимый код C ++, полезен при попытке выяснить, почему он не компилируется как C? C ++ (в значительной степени) является надмножеством C, поэтому существует ряд причин, по которым действительный код C ++ может не быть синтаксически правильным кодом C, не в последнюю очередь то, что C ++ рассматривает структуры как классы!