1

我在 Ubuntu 12.04 x64 上,使用带有 CDT 插件的 Eclipse Indigo,我的 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(因为无论如何都不需要它) -为编译器保持打开状态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 向我显示的错误如何,输出仍然是相同的,显示无序集可以正常工作并且已正确编译。这显然只是构建之前的一个问题。如果我的索引器在构建之前没有正确解析,那么该集合在运行时如何工作?

4

3 回答 3

0

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

于 2013-07-21T21:13:44.180 回答
0

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

于 2013-07-20T23:16:29.610 回答
0

您的问题是文件的扩展名.c不是.cpp(或.cc),这导致它被编译为gcc而不是g++.

这意味着它被视为纯 C 代码而不是 C++11,因此它不会编译也就不足为奇了。

于 2013-07-21T10:28:34.300 回答