2012-02-20 4 views
21

移動コンストラクタを使用するC++ 11のコードをg ++でコンパイルできないようです。私はこのエラーを取得しておいてください。どのようにして、g ++がムーブコンストラクタでC++ 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 
+2

移動コンストラクタのconst参照を渡すことはかなり役に立たないことに注意してください。現実的には 'Blarg(Blarg &&オリジナル)'でなければなりません。 – ildjarn

+0

ええ、ありがとう。私はそれを実際のコードで修正しました。私もそれを上に修正します。 – Collin

答えて

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のように、リリースバージョンにはオプションでさまざまな最適化フラグを考慮する必要があります。

+2

"Do It Right"、-std = C++ 0xのマニュアルページでは、 "このオプションは将来的に削除される可能性のある実験的機能を有効にする"と述べています。これらのマンページでは守備的です:-) –

+0

ありがとうございますフィルタリングから600+ページのマニュアルまで...私はこれが意図したとおりに動作することを二重にチェックし、これを答えとしてマークします。 – Collin

+2

@CaptainGiraffe:確実に言えば、方言オプションは「正しいことをする」の下には含まれていません。つまり、 'C++ 0x'はしばらくの間サポートされますが、4.7以降は' C++ 11'とも言えます。 –

14

コマンドラインに-std=c++0xを追加するのを忘れたのはおそらくです。

+0

貧弱なこと、同じ回答時間と同じくらい良い回答はあるものの、多くの票がない。私はあなたのことがより簡潔な関連答えだと思います! –

関連する問題