web-dev-qa-db-ja.com

EclipseとminGWを使用した複数の「解決できなかった」問題

私は最近、「Eclipse IDE for C/C++ Developers」とminGW(4.8.1)をインストールして、久しぶりにC++に戻れるようにしました。

_-std=c++11_を_Other flags_に_C/C++ Build/Settings/Tool Settings/GCC C++ Compiler/Miscellaneous_で追加しました

いくつかのC++ 11機能を利用する小さなプログラムがあります(たとえば、chronoライブラリ、_.emplace_back_を使用)。

実行後、[問題]ウィンドウに複数の未解決の問題が表示されます(以下を貼り付けます)。

興味深いことに、プログラムはコンパイルして正常に実行されます。

  1. これで、これらの問題を解決するためにEclipseで設定していないものがありますか?

  2. MinGW(4.8.1)のto_string()関数にまだ問題があるかどうかは誰にもわかりますか。以下はコンパイルされません。

    _window.setTitle("Bullets on screen: " + to_string(bullets.size()) + " currentSlice: " + to_string(currentSlice) + " FT: " + to_string(ft) + " FPS: " + to_string(fps) );
    _

    Visual Studio Express 2013を使用してコンパイルします(ただし、chronoライブラリの精度に問題があるため、minGWに切り替えます)。

    ありがとう。

Eclipseの「問題」ウィンドウの出力:

_Description Resource Path Location Type
 Symbol 'duration' could not be resolved chronotest.cpp /chronotest/src line 19 Semantic Error
 Function 'now' could not be resolved Test2.cpp /Test2/src line 143 Semantic Error
 Function 'duration_cast' could not be resolved Test2.cpp /Test2/src line 160 Semantic Error
 Function 'now' could not be resolved Test2.cpp /Test2/src line 158 Semantic Error
 Symbol 'chrono' could not be resolved Test2.cpp /Test2/src line 8 Semantic Error
 Type 'std::centi' could not be resolved chronotest.cpp /chronotest/src line 20 Semantic Error
 Type 'std::chrono::seconds' could not be resolved chronotest.cpp /chronotest/src line 24 Semantic Error
 Type 'std::time_t' could not be resolved chronotest.cpp /chronotest/src line 48 Semantic Error
 Symbol 'duration' could not be resolved chronotest.cpp /chronotest/src line 47 Semantic Error
 Function 'now' could not be resolved chronotest.cpp /chronotest/src line 44 Semantic Error
 Function 'now' could not be resolved chronotest.cpp /chronotest/src line 39 Semantic Error
 Type 'std::chrono::system_clock' could not be resolved chronotest.cpp /chronotest/src line 38 Semantic Error
 Function 'end' could not be resolved Test2.cpp /Test2/src line 214 Semantic Error
 Symbol 'time_point' could not be resolved chronotest.cpp /chronotest/src line 38 Semantic Error
 Function 'end' could not be resolved Test2.cpp /Test2/src line 212 Semantic Error
 Type 'milli' could not be resolved Test2.cpp /Test2/src line 161 Semantic Error
 Method 'count' could not be resolved Test2.cpp /Test2/src line 161 Semantic Error
 Symbol 'duration_cast' could not be resolved Test2.cpp /Test2/src line 160 Semantic Error
 Symbol 'duration' could not be resolved Test2.cpp /Test2/src line 161 Semantic Error
 Method 'count' could not be resolved chronotest.cpp /chronotest/src line 51 Semantic Error
 Symbol 'duration_cast' could not be resolved chronotest.cpp /chronotest/src line 30 Semantic Error
 Method 'count' could not be resolved chronotest.cpp /chronotest/src line 30 Semantic Error
 Function 'to_time_t' could not be resolved chronotest.cpp /chronotest/src line 48 Semantic Error
 Method 'count' could not be resolved chronotest.cpp /chronotest/src line 32 Semantic Error
 Function 'ctime' could not be resolved chronotest.cpp /chronotest/src line 50 Semantic Error
 Method 'count' could not be resolved chronotest.cpp /chronotest/src line 33 Semantic Error
 Symbol 'duration' could not be resolved chronotest.cpp /chronotest/src line 22 Semantic Error
 Invalid arguments '
 Candidates are:
 __gnu_cxx::__normal_iterator<Bullet *,std::vector<Bullet,std::allocator<Bullet>>> erase(__gnu_cxx::__normal_iterator<Bullet *,std::vector<Bullet,std::allocator<Bullet>>>)
 __gnu_cxx::__normal_iterator<Bullet *,std::vector<Bullet,std::allocator<Bullet>>> erase(__gnu_cxx::__normal_iterator<Bullet *,std::vector<Bullet,std::allocator<Bullet>>>, __gnu_cxx::__normal_iterator<Bullet *,std::vector<Bullet,std::allocator<Bullet>>>)
 ' Test2.cpp /Test2/src line 212 Semantic Error
 Symbol 'ratio' could not be resolved chronotest.cpp /chronotest/src line 22 Semantic Error
 Invalid arguments '
 Candidates are:
 #0 remove_if(#0, #0, #1)
 ' Test2.cpp /Test2/src line 212 Semantic Error
 Symbol 'duration_cast' could not be resolved chronotest.cpp /chronotest/src line 28 Semantic Error
 Method 'count' could not be resolved chronotest.cpp /chronotest/src line 28 Semantic Error
 Method 'emplace_back' could not be resolved Test2.cpp /Test2/src line 191 Semantic Error
 Symbol 'ratio' could not be resolved chronotest.cpp /chronotest/src line 19 Semantic Error
 Symbol 'duration' could not be resolved chronotest.cpp /chronotest/src line 20 Semantic Error
 Symbol 'duration' could not be resolved chronotest.cpp /chronotest/src line 21 Semantic Error
 Function 'begin' could not be resolved Test2.cpp /Test2/src line 212 Semantic Error
 Symbol 'ratio' could not be resolved chronotest.cpp /chronotest/src line 21 Semantic Error
_

[編集]:残りの「to_string」のエラー詳細を含めないことをおologiesびします。 Eclipseの「問題」ウィンドウの出力には次のものがあります。

_    Description Resource    Path    Location    Type
'to_string' was not declared in this scope  Test2.cpp   /Test2/src  line 170    C/C++ Problem
Function 'to_string' could not be resolved  Test2.cpp   /Test2/src  line 170    Semantic Error
Function 'to_string' could not be resolved  Test2.cpp   /Test2/src  line 170    Semantic Error
unused variable 'currentSlice' [-Wunused-variable]  Test2.cpp   /Test2/src  line 125    C/C++ Problem
Function 'to_string' could not be resolved  Test2.cpp   /Test2/src  line 170    Semantic Error
Invalid arguments '
Candidates are:
void setTitle(const sf::String &)
'   Test2.cpp   /Test2/src  line 170    Semantic Error
Function 'to_string' could not be resolved  Test2.cpp   /Test2/src  line 170    Semantic Error
_
16
Jim

Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros, etc. -> Providers -> CDT GCC built-in compiler settingsに移動し、Use global provider shared between projectsを無効にして、コマンドライン引数-std=c++11を追加します。

Eclipseライブコード分析は、ビルドコンパイラと同じ設定を共有しません。 Window -> Preferences -> C/C++ -> Build -> Settings -> CDT GCC Built-in Compiler Settingsで設定をグローバルに(プロジェクトだけでなく)変更することもできます。

編集:#include <string>を使用するには、std::to_stringが必要です。

31
Nabla

@Nablaと@Enisseyの回答にいくつかの詳細を追加します。

コマンドライン引数を追加する場合、たとえば、CDT GCCビルトインコンパイラー設定グローバル設定のCygwin

${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"

そうやって

${COMMAND} ${FLAGS} -E -P -v -dD -std=c++11 "${INPUTS}"

インデックスの再構築 にするには、プロジェクトを右クリックし、[インデックス]サブメニューの下に移動して、[再構築]を選択します。

私の場合、変更をグローバルに行い、インデックスを再構築しました。

6
user2603432

gccコンパイラを次からダウンロードします。

http://www.equation.com/servlet/equation.cmd?fa=fortran

c:\minGWフォルダーにインストールし、新しいワークスペース/新鮮なEclipse設定を使用します。

再構築、設定などを試みる前に再起動することを忘れないでください。

MinGWをデフォルトのツールチェーンウィンドウとして設定する->設定->新しいC++ ..-> MinMGをツールチェーンとして設定する.

リストに表示されない場合は、プロジェクトの作成時に「プロジェクトの種類を表示...」も選択解除します。

0
USer22999299