2011-08-14 70 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。 –