2009-05-13 10 views
1

私は、WindowsとLinuxの両方でコンパイルする必要があるアプリケーションを構築しています。アプリケーションは、MinGWのコンパイラは、このCコンパイラを列挙する

typedef struct somestruct{ 
    ...snip... 
    enum {NODE, REAL} type; 
}; 

somestruct* something; 
switch (something->type){ 
case NODE: 
    ...stuff...; 
    break; 
case REAL: 
    ...otherstuff...; 
    break; 
} 

を拒否した以外はほぼすべての作品、Cで書かれているそれはNODEとREALは、定義された しかし、私はスコープ解決

case somestruct::NODE 

を供給する場合、これはでコンパイルされていないと言いますMinGW 3.4.1では、Linuxでgcc 4.1.2をコンパイルすることはできません。これは単にプリプロセッサで解決する必要のあるコンパイラの問題ですか、それとも他の説明がありますか?あなたは、ネストを取り除く場合

+1

C++ではなく、C++について質問していることを確認できますか? –

+0

これは間違いなくCです。「何か」はポインタです。 – Mitch

+4

Cはsomestruct :: NODEで使用するような構造体スコープを持っていません。あなたは他の言語について話している必要があります –

答えて

3

、それは可搬性動作するはずです:私はこれに非常によく似たコードを見てきました

typedef enum somestruct_type { 
    somestruct_type_NODE, somestruct_type_REAL 
} somestruct_type; 
typedef struct somestruct { 
    ...snip... 
    somestruct_type type; 
} somestruct; 

はCおよびC++コンパイラの多数に移植します。

(私はこれを行う唯一の方法ではありません;私はちょうどこの方法が動作すると言っています)。

6

アプリは "C"で書かれていますが、コンパイラはsomestruct::NODEを有効としますが、これは有効な "C++"ですが、有効な "C"ではありません。

結論:このコードをC++モードでMinGWでコンパイルしていますが、他のすべてのコンパイラはCモードでコンパイルしています。

考えられる原因:MinGWはfoo.Cfoo.cを同じように扱わない場合があり、ファイルの名前は大文字のCサフィックス(UNIXではC++を意味します)が付いています。

解決策:Plain-Cコンパイルを強制するには、MinGWに-xcフラグを追加します。

関連する問題