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

时间:2014-01-11 17:41:35

标签: c++ eclipse gcc c++11 mingw32

我最近安装了(最新版本的)'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。

    感谢。

  3. 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'Problem'窗口输出具有以下内容:

        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
    

3 个答案:

答案 0 :(得分:30)

转到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

答案 1 :(得分:5)

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

添加命令行参数时,例如,全局首选项中的CDT GCC内置编译器设置Cygwin,

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

这样做,

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

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

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

答案 2 :(得分:0)

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

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

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

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

同时将MinGW设置为默认工具链窗口 - &gt;偏好 - &gt;新的C ++ .. - &gt;将MinMG设置为首选的工具链。

如果您无法在列表中看到它,请在创建项目时取消选择“show project types ....”。