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

-pedantic对于 C++,默认情况下是打开的,因此无需再说一遍。如果您想要更挑剔的警告,请尝试添加-Wextra。)

于 2011-05-02T19:54:44.410 回答
3

std::shared_ptr在 c++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 回答