Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ eclipse无法识别std::stoi_C++_Eclipse_C++11_G++_C++ Standard Library - Fatal编程技术网

C++ eclipse无法识别std::stoi

C++ eclipse无法识别std::stoi,c++,eclipse,c++11,g++,c++-standard-library,C++,Eclipse,C++11,G++,C++ Standard Library,在我运行Windows7x64、EclipseLuna和g++4.9.2(通过cygwin安装)的系统上,g++似乎从未声明过std::stoi。 根据文档,stoi是字符串库的一部分,因此显然我有#include 此外,我知道stoi是在C++11中引入的,我已经为我的编译器(g++)设置了适当的标志,尽管这看起来像是一个IDE错误,而不是编译器错误 尽管如此,在构建项目时,我仍会收到以下错误消息之一: error: 'stoi' is not a member of 'std' error:

在我运行Windows7x64、EclipseLuna和g++4.9.2(通过cygwin安装)的系统上,g++似乎从未声明过std::stoi。 根据文档,stoi是字符串库的一部分,因此显然我有
#include

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

尽管如此,在构建项目时,我仍会收到以下错误消息之一:

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

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

这需要进行大量挖掘,但显然,声明stoi的代码位于
内部,看起来是这样的:

#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); }
#如果(已定义(uugxx_u实验性cx0x_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\
&&!已定义(\u GLIBCXX\u已\u已断开\u VSWPRINTF))
#包括
命名空间std\u GLIBCXX\u可见性(默认)
{
_GLIBCXX\u开始\u命名空间\u版本
//21.4数字转换[字符串.转换]。
内联整数
stoi(常量字符串和字符串,大小\u t*\u idx=0,整数\u基数=10)
{return uu gnu cxx::u stoa(&std::strtol,“stoi”,uu str.c_str(),
__idx,_基);}
因此,很容易看出,为了使
std::stoi
可用,必须确保以下几点:

  • 定义了
    \uuuugxx\ucxx\u0x\uuux\uuux
  • \u GLIBCXX\u USE\u C99
    已定义
  • \u GLIBCXX\u已损坏\u VSWPRINTF
    未定义
现在,在Eclipse中,如果启用了自动完成,那么检查并设置它们是非常容易的

检查:只需开始在代码中的任意位置、新行上键入它们,然后查看自动完成(通常为CTRL+Space)是否提示它们。如果提示,则说明它们已定义。如果没有,则继续阅读

定义也很简单!导航到:项目->属性->C/C++常规->路径和符号->符号选项卡

从选项列表中单击GNUC++,向左,然后单击<强>添加< /强>,并简单地给出所需的名称。

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

请注意,在进行此操作时,您可能还需要定义以下符号:
\uuu cplusplus
带值
201103L

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

它隐藏在
后面-只是您的env没有配置为公开该段代码

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

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

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

要修复:

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


重新生成项目的索引,然后就可以了。它应该可以工作。

定义的意思是将值设置为“true”或者什么?@magulla by defined我的意思是它应该只出现在符号选项卡中。它不需要有值-这类似于头巾的C约定-它们没有值,只是声明而已。谢谢,我已经找到了它们的定义位置。它们确实有值。env变量(符号)无法使用out值定义。\uuuuCPlusplus for me设置为199711L。您的指示不起作用。它仍然坚持使用较旧的\uuuCPlusplus版本。