std :: stoi不被eclipse识别

时间:2015-08-31 10:24:28

标签: c++ eclipse c++11 g++ c++-standard-library

在我的系统上,运行Windows 7 x64,Eclipse Luna和g ++ 4.9.2(通过cygwin安装),似乎std :: stoi从未被g ++声明。 根据文档,stoi是字符串库的一部分,所以显然我有#include <string>

另外,我知道stoi是在C ++ 11中引入的,我已经为我的编译器(g ++)设置了适当的标志,即使这看起来像是 IDE错误,而不是编译错误。

但是,在构建项目时,我会收到以下错误消息之一:

error: 'stoi' is not a member of 'std'
error: Function 'stoi' could not be resolved

我该如何解决这个问题?如何让Eclipse识别stoi?

2 个答案:

答案 0 :(得分:2)

这需要花费很多时间,但显然,声明stoi的代码位于<basic_string.h>内,它看起来像这样:

#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99) \
 && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
#include <ext/string_conversions.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
  // 21.4 Numeric Conversions [string.conversions].
  inline int
  stoi(const string& __str, size_t* __idx = 0, int __base = 10)
  { return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
                __idx, __base); }

因此,很容易看到为了让std::stoi可用,必须确保以下内容:

  • __GXX_EXPERIMENTAL_CXX_0X__已定义。
  • _GLIBCXX_USE_C99已定义。
  • _GLIBCXX_HAVE_BROKEN_VSWPRINTF NOT 已定义。

现在,在Eclipse中,如果你打开了自动完成功能,检查这些并设置它们就很容易了!

检查:只需在代码中的任意位置开始输入新行,然后查看是否自动完成(通常是CTRL + Space)。如果确实如此 - 它们已被定义。如果他们不是,继续阅读。

定义也很简单!导航至:项目 - &gt;属性 - &gt; C / C ++一般 - &gt;路径和符号 - &gt;符号选项卡

点击左侧选项列表中的 GNU C ++ ,然后点击添加,只需输入所需的名称。

单击“确定”并在添加所需定义后关闭属性窗口,并通过导航到* Project - &gt;重建索引器。 C / C ++索引 - &gt;的 重建

P.S。当你在它时,你可能还想定义以下符号: 值__cplusplus的{​​{1}}。

(这将有助于设置各种其他选项,例如std :: unordered_set)。

答案 1 :(得分:0)

它隐藏在<basic_string.h>后面-只是您的环境未配置为公开那段代码。

当您拥有一个Makefile项目时,Eclipse索引器有时需要帮助您了解环境以匹配您的Makefile。因此,即使eclipse会显示错误,也可以使用make成功构建项目。

对于此特定问题,您基本上希望将__cplusplus宏设置为> = 201103L。将-std=c++11添加到您的makefile中可为您的make环境做到这一点,但是我们也必须帮助Eclipse。

对我来说,即使遵循hyit的指示,Eclipse仍将其设置为199711L。

要修复:

项目->属性-> C / C ++常规->预处理器包括路径,宏等-> CDT GCC内置编译器设置[共享]->在$ {COMMAND}之后添加-std = c ++ 11

重建项目的索引,然后开始。它应该工作。