2008-08-29 1 views
2

を使用しているとき、私はCコードとしてコンパイルとのVisual Cで簡単な.C++(/ TC) をコンパイルしていると私は、このコンパイラエラーにコンパイラエラーC2143構造体

エラーC2143取得:構文エラー:不足しているが';'同じ

struct foo test; 

は、構造体のtypedefでを使用するために行くの単純な構造体のために呼び出す行の「タイプ」

前。

エラーC2275:「FOO」:あなたは誤って前の行にセミコロンを表現

答えて

6

Cでは、コードの前にすべての変数を宣言する必要があることを忘れていました。

+0

私は同じ問題を抱えていたようです。 – user58670

1

として、この種の不正使用を省略しましたか?前の行が#includeの場合は、セミコロンが見つからない可能性があります。

編集:残りのコードが有効なC++である場合、問題の原因を特定するための情報が不足している可能性があります。おそらく、コードをpastebinに投稿して、すべてを見ることができます。

理想的には、ポストを小さくする過程で、突然動作を開始し、問題を発見しました。

0

構造タイプはどのように定義されていますか? (あなたは「S1」バージョンを使用しているため)すでに構造体のtypedefを作ったので

// 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; 
}; 
1

は、あなたが書く必要があります:

foo test; 

ではなく、それを行うには二つの方法がありますCおよびC++

0

C2143の両方で動作します

struct foo test; 

基本的に、コンパイラはトークンtを得たことを言います現在の状況では違法だと思う帽子。このエラーの意味の1つは、コンパイラエラーを引き起こす行の前に実際の問題が存在する可能性があることです。グレッグが言ったように私はこの問題を診断するためにあなたのコードをもっと見る必要があると思います。

これが有効なC++コードが、なぜC言語としてコンパイルされないのかを理解しようとしているときに、なぜそれが役に立つと思いますか? C++は(主に)Cのスーパーセットなので、有効なC++コードが構文的に正しいCコードではない理由はいくつもあります.C++は構造体をクラスとして扱います。