質問
Code(/TC)としてコンパイルを使用してVisualC ++でSimple .Cをコンパイルしています。このコンパイラエラーが表示されます
エラー C2143:構文エラー :ない ';' 「タイプ」の前
単純な構造体を呼び出す行上
struct foo test;
構造体の typedef を使用する場合も同様です。
エラー C2275:'FOO' :この型を式として不正に使用する
解決
C ではコードの前にすべての変数を宣言する必要があることを忘れていました。
他のヒント
前の行で誤ってセミコロンを省略しませんでしたか?前の行が #include
, 、欠落しているセミコロンを別の場所で探す必要がある場合があります。
編集:コードの残りの部分が有効な C++ である場合、問題の内容を判断するのに十分な情報がない可能性があります。コードを次の場所に投稿できるかもしれません。 ペーストビン それで全体を見ることができます。
理想的には、投稿用にサイズを小さくする過程で、突然機能し始めて、問題が発見されることになります。
すでに構造体の typedef を作成しているため (「s1」バージョンを使用したため)、次のように記述する必要があります。
foo test;
それよりも
struct foo test;
これは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;
};
C2143 は基本的に、コンパイラが現在のコンテキストでは不正であると考えられるトークンを取得したことを示しています。このエラーの影響の 1 つは、コンパイラ エラーを引き起こす行よりも前に実際の問題が存在する可能性があることです。グレッグが言ったように、この問題を診断するにはコードをさらに調べる必要があると思います。
また、これが有効な C++ コードであるという事実が、なぜ C としてコンパイルされないのかを解明する際に役立つと考えるのかもわかりません。C++ は (主に) C のスーパーセットであるため、有効な C++ コードが構文的に正しい C コードでない可能性がある理由は数多くあります。特に、C++ が構造体をクラスとして扱うことが挙げられます。