web-dev-qa-db-ja.com

moveコンストラクターを使用してg ++でc ++ 11コードをコンパイルするにはどうすればよいですか?

Moveコンストラクターを使用するc ++ 11コードをg ++でコンパイルできないようです。私はこのエラーを受け続けます:

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
21
Collin

g++ -std=c++0x ./t2.cppと言います。

あなたがそれにいる間、あなたは同様にそれを正しく行い、すべての警告を有効にするかもしれません:

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

本当に、本当にこれ以上コンパイルしてはいけません特にコードについて質問する場合SO :-)さまざまな最適化フラグをオプションで-s -O2 -flto -march=nativeなどのリリースバージョンを検討してください。

39
Kerrek SB

コマンドラインに-std=c++0xを追加するのを忘れた可能性があります。

14