Как получить g ++ для компиляции кода c ++ 11 с помощью конструктора перемещения? - PullRequest
21 голосов
/ 21 февраля 2012

Я не могу заставить 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

Ответы [ 2 ]

39 голосов
/ 21 февраля 2012

Скажи g++ -std=c++0x ./t2.cpp.

Пока вы это делаете, вы также можете сделать все правильно и включить все предупреждения:

g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp

Вы действительно, действительно, не должны компилировать с чем-то меньшим, особенно , если вы собираетесь задавать вопросы о своем коде на SO :-) Различные опционные флаги необязательно следует учитывать для версии выпуска, такие как -s -O2 -flto -march=native.

14 голосов
/ 21 февраля 2012

Возможно, вы забыли добавить -std=c++0x в командную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...