如果我包含“-ansi”,为什么我的 C++0x 代码无法编译?编译器选项?

发布于 2024-11-04 23:25:07 字数 414 浏览 6 评论 0原文

我遇到了一个非常奇怪的错误,只有当我使用 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 进行编译也可以。为什么?

I've come across a really weird error that only pops up if I use the ansi flag.

#include <memory>

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

Here's the compilation, tested with gcc 4.5.2 and 4.6.0 (20101127):

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

But compiling without -ansi works. Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

秋风の叶未落 2024-11-11 23:25:07

对于 GNU C++ 编译器,-ansi-std=c++98 的另一个名称,它会覆盖 -std=c++0x > 你之前在命令行上。您可能只需要

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

-pedantic 在 C++ 中默认处于启用状态,因此无需再说一遍。如果您想要更挑剔的警告,请尝试添加 -Wextra。)

For the GNU C++ compiler, -ansi is another name for -std=c++98, which overrides the -std=c++0x you had earlier on the command line. You probably want just

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

(-pedantic is on by default for C++, so it's unnecessary to say it again. If you want pickier warnings, try adding -Wextra.)

时光暖心i 2024-11-11 23:25:07

std::shared_ptr 在 c++98 中不存在。尝试以下更改:

#include <tr1/memory>
...
explicit Test(std::tr1::shared_ptr<double> ptr) {}   

std::shared_ptr doesn't exist in c++98. Try these changes:

#include <tr1/memory>
...
explicit Test(std::tr1::shared_ptr<double> ptr) {}   
救星 2024-11-11 23:25:07

嗯,因为 C++0x 还没有 ANSI 标准? ANSI 标志检查是否符合现有标准,而不是未来的标准。

Um, because there is not yet an ANSI standard for C++0x? The ANSI flag checks for conformance with existing standards, not future ones.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文