Как получить g++ для компиляции кода С++ 11 с помощью конструктора перемещения?
Я не могу заставить g++ компилировать код С++ 11, который использует конструктор перемещения. Я продолжаю получать эту ошибку:
[email protected]:~/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
Ответы
Ответ 1
Скажите g++ -std=c++0x ./t2.cpp
.
Пока вы на нем, вы также можете сделать это правильно и включить все предупреждения:
g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp
Вы действительно не должны компилироваться с меньшими затратами, особенно если вы собираетесь задавать вопросы о своем коде на SO:-) В версии выпуска, например, -s -O2 -flto -march=native
, необходимо опционально использовать различные флаги оптимизации.
Ответ 2
Вероятно, вы забыли добавить -std=c++0x
в свою командную строку.