Ошибка компилятора C2143 при использовании структуры

StackOverflow https://stackoverflow.com/questions/35333

  •  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 ++ рассматривает структуры как классы!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top