Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是无效的C++;? struct杂交表达{ 稀土元素; 表达式节点*en; }; 载体加压; 插入(hexpression.begin()+starti, (杂交表达){NULL,en});_C++ - Fatal编程技术网

C++ 这是无效的C++;? struct杂交表达{ 稀土元素; 表达式节点*en; }; 载体加压; 插入(hexpression.begin()+starti, (杂交表达){NULL,en});

C++ 这是无效的C++;? struct杂交表达{ 稀土元素; 表达式节点*en; }; 载体加压; 插入(hexpression.begin()+starti, (杂交表达){NULL,en});,c++,C++,gcc在没有警告的情况下构建,但VisualStudio2010甚至不会编译它 不喜欢这个位:(CopyDeXuffress){NULL,En} /Cult>< P>这是当前标准中不有效的C++。我认为GCC允许它因为GCC特定的编译器扩展。 < P>这是使用C++中不包含的C++编程语言的一部分,它被称为“复合文字”。code>g++-ansi将对此进行诊断,并说 警告:ISO C++禁止复合文字< /P> 这不是C++0x的一部分 与C++0x兼容的语法应该是 struct HybridEx

gcc在没有警告的情况下构建,但VisualStudio2010甚至不会编译它


不喜欢这个位:<代码>(CopyDeXuffress){NULL,En} /Cult>

< P>这是当前标准中不有效的C++。我认为GCC允许它因为GCC特定的编译器扩展。

< P>这是使用C++中不包含的C++编程语言的一部分,它被称为“复合文字”。code>g++-ansi将对此进行诊断,并说

警告:ISO C++禁止复合文字< /P> 这不是C++0x的一部分

与C++0x兼容的语法应该是

struct HybridExpression {
    RawExpressionElement *ree;
    ExpressionNode *en;
};    

vector<HybridExpression> hexpression;

hexpression.insert(hexpression.begin() + starti, 
        (HybridExpression) {NULL, en}); 
引用C99标准第6.5.2.5段:

由括号组成的后缀表达式 类型名称后跟括号内的初始值设定项列表 是复合文字。它提供了一个未命名的对象,其 值由初始值设定项列表给出

根据,您可以在用GCC编译的C++程序中使用C扩展(包括C99的东西)。


是您实际使用的扩展。

编译器错误消息是什么?至少从N3242开始,C++0x中不包含复合文字,并且非常量初始值设定项不是本例中使用的扩展(它们是gcc对C89语言的扩展,而不是对C++)。@Cubbi:正如第一个链接所述,你可以使用C++的C语言的GCC扩展。是的,第一个链接很好,这就是为什么我没有投票。第二个不相关。应该是@Cubbi:谢谢,我第一次没有找到它。@tm1rbrt:你仍然可以因为他们放弃了C而对他们大发雷霆@库比:你安装了Microsoft Visual C吗?不,是微软Visual C++。自从Microsoft C/C++Compiler 7.0发布以来,他们就没有假装支持C标准,我认为它是在C99完成之前发布的。@Cubbi,你是说
HybridExpression(NULL,en)
?请注意括号,而不是大括号。@Rob Adams:圆括号会调用HybridExpression的双参数构造函数。花括号使用初始值设定项列表对其进行初始化:由于统一的初始化,它也可以在不显式声明
HybridExpression
对象的情况下工作:
hexpression.insert(hexpression.begin()+starti,{NULL,en})
hexpression.insert(hexpression.begin() + starti, HybridExpression{NULL, en});