0

由于我决定满怀热情地投入开源世界,我下载了面向 C/C++ 开发人员的 Eclipse IDE(Kepler Service Release 1)并安装了 minGW。

我使用minGW 作为工具链创建了一个新项目,并且可以使用<iostream>.tuple

#include <tuple>
int main(int in)
{
    std::tuple<int> lameTuple; // symbol "tuple" could not be resolved
    return 0;
}

我尝试在 GCC C++ 编译器工具设置中添加-std=c++0x其他标志,但这似乎没有帮助。有任何想法吗?

4

1 回答 1

2

我也遇到过这个问题。在 Windows 上使用 Eclipse + Mingw GCC 是一个令人难以置信的.... 由于像这样的随机问题,令人震惊的设置。例如,我的工作区中有一个 C++11 项目,除了 std=c++11 或 gnu 标志之外不需要任何变通办法,而其他人则完全死掉不管这一点。

不幸的是,唯一的答案是我认为是黑客。如果您查看 Tuple 标头,您会看到:

#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else

因此,这里的答案(解决方案)变得显而易见。在某个地方,无论是编译器标志还是.cpp文件中的定义,您都希望将 __cplusplus 定义为大于201103L. 我是怎么做到的

项目属性->C/C++ 常规->路径和符号

然后,在“符号”选项卡下,我添加了一个新符号。对于我使用的符号名称和我使用__cplusplus的值201303L。这将强制索引器重新运行,此时 Eclipse 将正确使用 C++11 包含。

在旁注中,我认为有人创建一个 Eclipse CDT + Mingw GCC 安装程序来正确设置所有内容已经过时了。这个问题只是您在使用此 IDE 和工具链时遇到的大量问题的皮毛,从错误的 Mingw 版本到 IDE 中糟糕的索引和解析。在那张纸条上,请始终确保您没有使用有缺陷的 Mingw 发行版。这也可能导致这些问题。

编辑#1
另请注意,即使使用此符号,您也应该在“杂项”下包含 --std=X 标志作为编译器标志。此符号仅用于 IDE 解析具有正确 C++11 支持的标头。

于 2014-03-25T13:32:56.383 回答