编译器选项不适用于无序集C ++ 11功能

时间:2013-07-20 23:03:57

标签: c++ eclipse c++11 eclipse-cdt

我在Ubuntu 12.04 x64上,使用Eclipse Indigo w / CDT插件,我的g ++版本是4.7.3。我已经为发现选项添加了编译器选项-std=c++11和相同的选项(即使代码在编写时没有自动完成)。

Eclipse以红色突出显示以下部分内容并发出警告。但是,程序运行时(忽略错误)会打印预期结果(Compiled with gcc 4.7\n 1 0\n)。我该如何解决这个问题?

#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) 

关闭我的-std=c++11编译器的C编译器选项后(因为它不应该在那里需要) - 保持{{1}编译器,打印到控制台的输出如下。

C++

而且,不管Eclipse向我显示的错误,输出仍然是相同的,显示无序集合工作并正确编译。这显然只是构建之前的一个问题。如果我的索引器在构建之前没有正确解析,那么该集如何在运行时工作?

3 个答案:

答案 0 :(得分:0)

您使用的编译器可能不包含对C ++ 11的支持,请查看您的手册页或IDE文档,它会告诉您是否有支持。

答案 1 :(得分:0)

您的问题是该文件的扩展名为.c而不是.cpp(或.cc),这会导致使用gcc代替g++进行编译}。

这意味着它被视为纯C代码而不是C ++ 11,这使得它不会被编译而不足为奇。

答案 2 :(得分:0)

我放弃了,因为我无能为力,清除了我的日食系统和我的~/.eclipse文件夹,下载了Kepler及其CDT版本,现在一切正常。