私は Ubuntu 12.04 x64 を使用しており、Eclipse Indigo with 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
(とにかく必要ではないため) 、コンパイラのオプションをオンのままにすると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 が表示するエラーに関係なく、出力は同じであり、順序付けられていないセットが機能し、適切にコンパイルされたことを示しています。これは明らかにビルド前の問題です。ビルド前にインデクサーが適切に解析しない場合、セットは実行時にどのように機能しますか?