2011-08-14 102 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++?

編輯:刷的定義:

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

'brushes'的定義是什麼? – Alastair

+0

另外,具體的錯誤信息是什麼? – shelleybutterfly

+0

@shelleybutterfly - 這是特定的,因爲它是VC++投擲。 – Skaty

回答

1

您正在使用其不受MS VC支撐的C99構建體(§6.5.2.5複合文字),但其通過GCC支撐。

您應該能夠通過降低(brushes)方式就可以得到代碼編譯兩個:

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

這將初始化unionbrushes的第一個成員。這適用於GCC;我相信它也應該和MSVC一起工作。

+0

那麼,工作。但對於某些類型,它返回一個錯誤「預期的表達式」。例如:return(brushes){5.6,214.0,13.0}; – Skaty

+0

@Skaty:和以前一樣 - 你不能在MSVC中使用C99結構;它不支持C99。 –