2012-03-19 9 views
18

私はこれをコンパイルすることができないと言ったら、これは恥ずかしいと思います。あなたは私を助けてくださいます。unique_ptrコンパイルエラー

#include<memory> 
using namespace std; 

int main() 
{ 
    std::unique_ptr<int> p1(new int(5)); 
    return 0; 
} 
$ gcc main.cpp 
main.cpp: In function ‘int main()’: 
main.cpp:6:2: error: ‘unique_ptr’ was not declared in this scope 
main.cpp:6:13: error: expected primary-expression before ‘int’ 
main.cpp:6:13: error: expected ‘;’ before ‘int’ 

$ gcc --version 
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 
+2

は 'gcc'はほとんどいくつかのオプションを通過することなく使用されることはありません。少なくとも 'g ++ -std = C++ 0x -pedantic main.cpp'を試してください。 –

+5

名前空間stdを使用している場合はなぜstd ::を使用しますか?いずれかの方法?ありがとう。 – Azrael3000

+0

ありがとう。出来た。 1-私はそれを真とすることができるように答えを投稿してみませんか? 2 - あなたはそれに乗っている間、gccが決して使われない(そしてg ++が代わりに使用される)、またはおそらく参照にリンクする理由を私に与えてくれますか?ありがとう – rahman

答えて

31

これは単なる推測です。

ほとんどの場合、あなたが(同様または)、このようなプログラムをコンパイル:

g++ main.cpp 

あなたがした場合、問題は、gがデフォルトとしてC++ 03を使用しています++ということです。 ++ 11の機能(およびstd::unique_ptr)は、Cを使用するには、あなたは、C++の新しいバージョンを使用する必要があります。

g++ -std=c++11 

または

g++ -std=c++14 

をし、私はまた、-Wall -Wextra -pedanticを使用することをお勧めします。

+0

私は同じ問題に直面していますが、 '-std = C++ 11'フラグが有効であり、必要なすべてのヘッダが含まれています。何が間違っているのかわからない:将来の参考として、https://gist.github.com/canadien91/2ba3f9576823159c2d52 – Montreal

+0

@Montreal #include Stuck

+0

@Stuck、hmm、私の要点が含まれています。しかし、私がこれを追加した今、私は覚えていません。 – Montreal

3

あなたはコード::ブロックを使用している場合は、[設定]> [コンパイラ]> [コンパイラのグローバル設定に移動>コンパイラの設定てきたG ++ C++ 11 ISO C++言語の標準[-std=c++11]に従っ探しそれをチェックしてください!

コード::コンパイルするときブロックはあなたのため-std=c++11が追加されます)