使用 Eclipse 和 minGW 的多个“无法解决”问题

Posted

技术标签:

【中文标题】使用 Eclipse 和 minGW 的多个“无法解决”问题【英文标题】:Multiple "could not be resolved" problems using Eclipse with minGW 【发布时间】:2014-01-30 16:24:09 【问题描述】:

我最近安装了(最新版本的)“面向 C/C++ 开发人员的 Eclipse IDE”和 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)。

运行后,我在“问题”窗口中遇到多个未解决的问题,如下所示)。

有趣的是,该程序确实可以编译并运行。

    有了这个,我没有在 Eclipse 中设置什么来解决这些问题吗?

    有谁知道 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”的错误详细信息。 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

【问题讨论】:

另见***.com/questions/11814536/… 【参考方案1】:

转到Project -&gt; Properties -&gt; C/C++ General -&gt; Preprocessor Include Paths, Macros, etc. -&gt; Providers -&gt; CDT GCC built-in compiler settings,停用Use global provider shared between projects 并添加命令行参数-std=c++11

eclipse 实时代码分析不与构建编译器共享相同的设置。您还可以在 Window -&gt; Preferences -&gt; C/C++ -&gt; Build -&gt; Settings -&gt; CDT GCC Built-in Compiler Settings 中全局更改设置(不仅仅是项目)。

编辑:您需要#include &lt;string&gt; 才能使用std::to_string

【讨论】:

非常感谢 - 大多数涉及引用的解析器问题现已解决。 “to_string”问题仍然存在。抱歉,这里没有包含错误详细信息。我已经编辑了我的原始问题以包含这些错误。 @Jim 我添加到我的答案中。 经过大量谷歌搜索后,我发现为了让“to_string”函数在 minGW 中工作,您(当前)必须使用 minGW w64 fork 下载(在阅读了诸如 @987654321 之类的链接之后@ 然后使用rioki.org/2013/10/16/mingw-w64.html 中的链接)。希望这对其他人有所帮助。 同样重要的是要注意这适用于“Linux GCC”工具链。我愚蠢地尝试使用“Cross GCC”,但失败了。 我有第一部分,但即使代码执行正确,array 仍然无法识别!!!所以你答案的第二部分解决了它:i.imgur.com/EFrOeBP.png(之后也重建索引!!!)【参考方案2】:

我正在为@Nabla 和@Enissey 给出的答案添加一些细节。

在添加命令行参数时,例如CDT GCC Built-in Compiler Settings Cygwin in Global preferences,

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

这样做,

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

到rebuild the index,右键单击您的项目,进入索引子菜单,然后选择“重建”。

就我而言,我在全局范围内进行了更改并重建了索引。

【讨论】:

【参考方案3】:

从以下位置重新下载gcc编译器:

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

将它安装在c:\minGW 文件夹中使用新的工作空间/新的eclipse设置,它就像一个魅力!

在尝试之前不要忘记重新启动,重新构建和设置等。

以及将MinGW 设置为默认工具链窗口-> 首选项-> 新C++ .. -> 将MinMG 设置为首选工具链。

如果您在列表中看不到它,请在创建项目时取消选择“显示项目类型....”。

【讨论】:

以上是关于使用 Eclipse 和 minGW 的多个“无法解决”问题的主要内容,如果未能解决你的问题,请参考以下文章

用eclipse无法新建c/c++工程

带有 MinGW GCC 的 Eclipse CDT 生成错误 127

windows下使用mingw/gdb无法调试eclipse helios cdt上的小程序,控制台死机

Eclipse C++版无法找到头文件,在include左侧出现问号

无法在 Fedora Eclipse 上构建 GTK+ Windows 应用程序

c++开发人员的eclipse MinGW错误