【发布时间】:2014-08-05 12:38:20
【问题描述】:
我有这样的麻烦,当我们开始使用新的 C++11 时,编译器 (GCC) 说这段代码是错误的,但在旧版本上它可以正常工作:(
std::list<CCPoint> createPointArray(int count, ...) {
CCPoint val;
std::list<CCPoint*> arr;
va_list vl;
va_start(vl,count);
for (int i=0;i<count;i++)
{
val = va_arg(vl,CCPoint*);
arr.push_back(*val);
}
va_end(vl);
return arr;
}
这就是方式,我正在使用它:
createPointArray(3, &CCPoint(1.3,2.7), &CCPoint(1.5,1.75), &CCPoint(1.9,1.3))
编译器告诉我下一个:
Error 486 error : taking address of temporary [-fpermissive] (col 57)
为什么 &CCPoint(1.3,2.7) 有问题?如何更改此代码以使其适用于 C++11 和旧版本?
P.S.:我正在使用 Marmalade 7.3.1、Visual Studio 2010、cocos2d-x v2.2.1
【问题讨论】:
-
为什么不简单地在任何地方使用
createPointArray(3, CCPoint(1.3,2.7), CCPoint(1.5,1.75), CCPoint(1.9,1.3))和std::list<CCPoint>? -
您的代码无法编译 -
va_arg(vl, CCPoint*)是一个指针,因此您不能将它分配给不是指针的val。然后你做*val但val不是一个指针。并且val不能进入CCPoint *的列表。发布你的真实代码?
标签: c++ gcc c++11 cocos2d-x marmalade