C++ eclipse无法识别std::stoi
在我运行Windows7x64、EclipseLuna和g++4.9.2(通过cygwin安装)的系统上,g++似乎从未声明过std::stoi。 根据文档,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:
#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
从选项列表中单击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版本。