编译器选项不适用于无序集C++11功能
Compiler option not working for unordered set C++11 feature
我在Ubuntu 12.04 x64上,使用Eclipse Indigo w/CDT插件,我的g++版本是4.7.3。我已经添加了编译器选项-std=c++11
和相同的发现选项(即使代码在我编写时没有自动完成)。
Eclipse将以下部分用红色下划线显示并发出警告。但是,程序在运行时(忽略错误)会打印预期结果(Compiled with gcc 4.7n 1 0n
)。如何修复此行为?
#include <unordered_set>
#include <iostream>
using namespace std;
int main()
{
unordered_set<int> s; // Symbol unordered_set cannot be resolved
cout << "Compiled with gcc " << __GNUC__ << '.' << __GNUC_MINOR__ << endl;
s.insert(0); // Method insert cannot be resolved
s.insert(1); // Method insert cannot be resolved
s.insert(0); // Method insert cannot be resolved
for(auto i = s.begin(); i != s.end(); ++i) cout << ' ' << (*i);
// Method begin and end cannot be resolved
cout << endl;
return 0;
}
这是Eclipse在命令行中调用的:
...$ gcc -E -P -v -dD -std=c++11 .../specs.c
Using built-in specs.
...
gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-2ubuntu1~12.04)
在为我的C
编译器关闭-std=c++11
编译器选项后(因为那里无论如何都不需要它)-但为C++
编译器保持打开状态,打印到控制台的输出如下。
...$ g++ -E -P -v -dD -std=c++11 .../specs.cpp
Using built-in specs.
...
gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-2ubuntu1~12.04)
而且,不管Eclipse向我显示了什么错误,输出仍然是一样的,表明无序集是有效的,并且编译正确。这显然只是构建之前的一个问题。如果我的索引器在构建之前没有正确解析,那么该集在运行时是如何工作的?
您使用的编译器可能不支持C++11,请查看手册页或IDE文档,它会告诉您是否支持。
您的问题是文件的扩展名是.c
而不是.cpp
(或.cc
),这导致它使用gcc
而不是g++
进行编译。
这意味着它被视为纯C代码,而不是C++11,这使得它不会编译也就不足为奇了。
我放弃了,因为我无能为力,清除了我的eclipse系统和我的~/.eclipse
文件夹,下载了开普勒及其CDT版本,现在一切都正常了。
相关文章:
- 如何使用lock_guard在c++11中实现scoped_lock功能
- 如何获得CMake Tools以在Visual Studio Code中编译具有C++11(或更高版本)功能的程序?
- C++11 功能 std::map::at 编译旧版本的C++
- C++03 和 C++11 之间的c_str功能规范的差异
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- 如何实现声明功能-C 11,编译时间
- C 11:功能表指针,lambdas
- C 11功能参数
- 我如何知道我的编译器是否支持XXXXC++11功能
- 检查是否使用了 C++11 功能
- 警告:禁用犰狳中的 C++11 功能
- 如果我使用c++11功能编译一个文件,同时将其链接到一个没有c++11编译器选项编译的库,会有什么问题吗
- 编译器选项不适用于无序集C++11功能
- 正在禁用VS2012上的C++11功能
- 如何在不使用C++11功能的情况下初始化类中的数组
- 分割故障:11 - C功能
- 禁用 Visual Studio2013 中的 c++11 功能
- 如何检测我的源代码中使用了哪些 C++11 功能
- 有没有一个网页,微软保存了在最新的VC++中实现的C++11功能的最新列表
- 是 std::max_element 是 C++11 x 功能