2

このパブリック メソッドを宣言するクラスがあります。

virtual std::vector<float> operator()(const std::vector<float>& = {});

{}これは、c++ 11 の機能である均一な初期化 (ここでは単に) を使用します。でコンパイルするとき、これは私に何の問題も与えませんclang++ -std=c++11。しかし、私が使用するg++ -std=c++0xと、これが得られます:

error: expected primary-expression before '{' token

この-std=c++0xオプションは c++11 のサポートをもたらすはずではありませんか?

次のように標準の C++ を使用してメソッドを宣言しても、コンパイラはエラーを表示しません。

virtual std::vector<float> operator()(const std::vector<float>& = std::vector<float>());

Ubuntu 12.04 で g++ 4.6 を使用しています

4

2 に答える 2

0

GCC 4.6 は、c++11 のすべての機能をサポートしているわけではありません。

GCC は、今後の ISO C++ 標準である C++0x の実験的なサポートを提供します。このサポートは、-std=c++0x で有効にできます。

最新の GCC バージョンにアップグレードし、フラグを付けてコンパイルすることをお勧めします-std=c++11-std=c++14

于 2016-04-28T17:56:10.483 に答える