1

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

4

3 に答える 3

0

他にできることは何もなかったのであきらめ、Eclipse のシステムと~/.eclipseフォルダーをパージし、Kepler とその CDT バージョンをダウンロードしました。今ではすべてが機能しています。

于 2013-07-21T21:13:44.180 に答える
0

あなたの問題は、ファイルの拡張子が(または)では.cなく、..cpp.ccgccg++

これは、C++11 ではなく純粋な C コードとして扱われることを意味するため、コンパイルされないことは当然のことです。

于 2013-07-21T10:28:34.300 に答える
0

使用しているコンパイラには C++11 のサポートが含まれていない可能性があります。man ページまたは IDE ドキュメントを確認してください。サポートがあるかどうかがわかります。

于 2013-07-20T23:16:29.610 に答える