11

ansiフラグを使用した場合にのみポップアップする非常に奇妙なエラーに遭遇しました。

#include <memory>

class Test
{
  public:
    explicit Test(std::shared_ptr<double> ptr) {}
};

gcc 4.5.2および4.6.0(20101127)でテストされたコンパイルは次のとおりです。

g++ -std=c++0x -Wall -pedantic -ansi test.cpp
test.cpp:6:34: error: expected ')' before '<' token

しかし、作業なしでコンパイルし-ansiます。なんで?

4

3 に答える 3

10

GNU C++ コンパイラの場合、-ansiは の別の名前であり、以前にコマンド ラインで使用していた-std=c++98をオーバーライドします。-std=c++0xあなたはおそらくただ欲しい

$ g++ -std=c++0x -Wall minimal.cpp

( -pedanticC++ では既定でオンになっているため、もう一度言う必要はありません。より明確な警告が必要な場合は、追加してみてください-Wextra。)

于 2011-05-02T19:54:44.410 に答える
3

std::shared_ptrc++98 には存在しません。これらの変更を試してください:

#include <tr1/memory>
...
explicit Test(std::tr1::shared_ptr<double> ptr) {}   
于 2011-05-02T19:51:04.543 に答える
0

ええと、C++0x の ANSI 標準がまだないからですか? ANSI フラグは、将来の標準ではなく、既存の標準への準拠をチェックします。

于 2011-05-02T19:52:18.260 に答える