我似乎无法使用g ++来编译使用移动构造函数的c ++ 11代码。我一直收到这个错误:
collin@Serenity:~/Projects/arraylib$ g++ ./t2.cpp
./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&’ token
./t2.cpp:10:38: error: invalid constructor; you probably meant ‘Blarg (const Blarg&)’
我正在编写的程序与此完全不同,但我将其修改为似乎应该可以正常工作的部分,但仍会触发错误:
#include <iostream>
using namespace std;
class Blarg {
public:
Blarg () {};
Blarg (const Blarg& original) {}; /* Copy constructor */
Blarg (Blarg&& original) {}; /* Move constructor */
};
int main(int argc, char *argv[])
{
Blarg b;
return 0;
}
谁能告诉我我做错了什么?相反,如何解决它?
这是我的gcc版本:
gcc (Ubuntu/Linaro 4.6.2-14ubuntu2) 4.6.2
答案 0 :(得分:39)
说g++ -std=c++0x ./t2.cpp
。
当你在这里时,你也可以做正确的事并启用所有警告:
g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp
你真的,真的不应该用更少的编译,尤其是如果你要在SO上询问关于你的代码的问题:-)应该考虑发布版本的各种优化标志,例如-s -O2 -flto -march=native
。
答案 1 :(得分:14)
您可能忘记将-std=c++0x
添加到命令行。