Compile as C Code (/TC) を使用して Visual C++ で単純な .c をコンパイルすると、このコンパイラ エラーが発生します。
エラー C2143: 構文エラー: ';' がありません 「タイプ」の前に
単純な構造体を呼び出す行
struct foo test;
構造体の typedef を使用する場合も同様です。
エラー C2275: 'FOO': この型を式として不正に使用しています
Compile as C Code (/TC) を使用して Visual C++ で単純な .c をコンパイルすると、このコンパイラ エラーが発生します。
エラー C2143: 構文エラー: ';' がありません 「タイプ」の前に
単純な構造体を呼び出す行
struct foo test;
構造体の typedef を使用する場合も同様です。
エラー C2275: 'FOO': この型を式として不正に使用しています
C では、コードの前にすべての変数を宣言する必要があることを忘れていました。
構造体のtypedefはすでに作成されているため(「s1」バージョンを使用したため)、次のように記述します。
foo test;
それよりも
struct foo test;
これはCとC++の両方で機能します
前の行で誤ってセミコロンを省略しましたか? 前の行が の場合#include
、欠落しているセミコロンを別の場所で探す必要がある場合があります。
編集: コードの残りの部分が有効な C++ である場合、問題の原因を特定するのに十分な情報がない可能性があります。全体を確認できるように、コードをペーストビンに投稿することもできます。
理想的には、投稿するために小さくする過程で、突然動作し始め、問題を発見するでしょう!
C2143 は基本的に、現在のコンテキストでは違法であると考えられるトークンをコンパイラが取得したことを示しています。このエラーの意味の 1 つは、コンパイラ エラーをトリガーする行の前に実際の問題が存在する可能性があることです。グレッグが言ったように、この問題を診断するには、あなたのコードをもっと見る必要があると思います。
また、これが有効な C++ コードであるという事実が、C としてコンパイルされない理由を理解しようとするときに役立つと考える理由もわかりません。C++ は (大部分) C のスーパーセットであるため、有効な C++ コードが構文的に正しい C コードではない理由はいくつもあります。特に、C++ は構造体をクラスとして扱うためです!
構造タイプはどのように定義されていますか? それには 2 つの方法があります。
// 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;
};