2014-03-06 99 views
0

我试图构建开源游戏,但在尝试构建时不断收到此错误。我一直在寻找有没有在这里工作的最后半小时是错误指向错误C2143:语法错误:缺少','之前':'

void duel::restore_assumes() { 
    for(auto pcard : assumes) 
     pcard->assume_type = 0; 
    assumes.clear(); 
} 

代码和错误是

错误1个错误C2143:语法错误:缺少“” 前':' C:\用户\用户\桌面\项目源\ ocgcore \ duel.cpp 108 1 ocgcore (Visual Studio 2010中)

+2

我不知道VS2010有多好用C++ 11 –

+0

即时通讯使用vs2012,但将编译器更改为vs2010,因为它不会在使用2012编译器编译时创建lib文件 – outlaw1994

回答

3

MS VC++ 2010不支持C++ 2011中引入的基于范围的语句。但它有自己的语言扩展:for each

尝试将此代码

void duel::restore_assumes() { 
    for(auto pcard : assumes) 
     pcard->assume_type = 0; 
    assumes.clear(); 
} 

改变

void duel::restore_assumes() { 
    for each (auto pcard in assumes) 
     pcard->assume_type = 0; 
    assumes.clear(); 
} 

否则,你可以使用一个普通的循环使用对象的迭代器假定或某种标准算法,例如std::for_each

+0

谢谢这个工作完美的程序是用vs2010做的,所以当vs2012打开它时它一定在转换过程中改变了它 – outlaw1994

3

如该表中所示:C++11 Compiler Support

基于范围的循环不适用于MSVC2010,但适用于MSVC2012(它是版本11)。 所以,如果你使用2010编译器,这段代码将不能编译。

错误消息使其非常明显:编译器在for语句中不期待:

+0

但是当我使用2012编译器时,没有lib文件是生成 – outlaw1994

+0

那么这是另一个问题,这可能不在这个问题的范围内。创建另一个主题,发布代码,配置和观察行为。 – JBL

+0

好的会问新问题 – outlaw1994

-2

我不不擅长C++,所以我不保证我的答案是正确的,但你可以尝试。

C++不支持“foreach”,所以你应该像C一样使用它,不喜欢C#;

+4

自从C++ 11以后,C++确实支持foreach语法。并且要求改变语言绝对是错误的...... OP不会完全垃圾他的项目以支持这种语法方便... – JBL

相关问题