我在Ubuntu 12.04 x64上,使用Eclipse Indigo w/CDT插件,而我的g ++版本是4.7.3。我已經將編譯器選項-std=c++11
和相同的選項添加到發現選項中(即使代碼在寫入時沒有自動完成)。編譯器選項不適用於無序集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)
(無論如何,它應該沒有必要存在)關閉我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顯示我的,輸出還是一樣,表現出無序的作品和被正確編譯。這顯然只是構建之前的一個問題。如果我的索引器在構建之前沒有正確解析,那麼這個集合在運行時如何工作?
可能你安裝了多個版本的GCC,並且Eclipse以某種方式最終使用了錯誤的版本? (在你的代碼中插入類似'std :: cout <<「編譯的gcc」<< __GNUC__ <<'。'<< __GNUC_MINOR__ << std :: endl;'以便輸出用於編譯它的GCC版本。 ) – jogojapan
@jogojapan是的,我確實安裝了多個版本的GCC,但是你的代碼返回「Compiled with gcc 4.7」 - 應該有C++ 11,對嗎? – VF1
是的,沒錯。從4.7開始,C++ 11選項確實是「-std = C++ 11」(在4.6和更早的版本中它曾經是「-std = C++ 0x」)。所以,我不知道爲什麼它不起作用。 – jogojapan