2011-08-14 28 views
1

私のコードをコンパイルすると、VC++は上記のようにエラーを返します。影響を受けた行は(brushes){5.6, 214.0 , 13.0}エラー:C++では型名が許可されていません

具体的には、ここでは影響を受けるコードブロック

const brushes palette[] = { 
    (brushes){5.6, 214.0 , 13.0}, 
    (brushes){200.0, 211.0, 12.0} 
}; 

があるこのコードは、Linuxで罰金コンパイルされて、なぜこれがVC++のために起こっているのでしょうか?

EDIT:ブラシの定義:

typedef union { 
    struct { 
     double c; 
     double m; 
     double y; 
    } t; 
double v[3]; 
} brushes; 
+0

「ブラシ」の定義は何ですか? – Alastair

+0

また、具体的なエラーメッセージは何ですか? – shelleybutterfly

+0

@shelleybutterfly - それはそれが得られるほど具体的であり、それはVC++が投げたものです。 – Skaty

答えて

1

あなたはMS VCでサポートされていないC99構築物(§6.5.2.5複合リテラル)を使用しているが、GCCによってサポートされています。

あなたは(brushes)表記をドロップすることで、両方にコンパイルするためのコードを取得することができるはず:これはbrushesあるunionの最初のメンバーを初期化します

const brushes palette[] = { 
    { { 5.6, 214.0, 13.0 } }, 
    { { 200.0, 211.0, 12.0 } }, 
}; 

。これはGCCで動作します。 MSVCでもうまくいくはずです。

+0

まあ、それは働いた。しかし、いくつかの型では、 "Expected an expression"というエラーが返されました。例:return(ブラシ){5.6、214.0、13.0}; – Skaty

+0

@Skaty:以前と同じように、MSVCでC99構造を使用することはできません。 C99をサポートしていません。 –

関連する問題