My code:
#include <iostream>
#include <string>
int main()
{
std::string test = "45";
int myint = std::stoi(test);
std::cout << myint << '\n';
}
给我编译错误:
error: 'stoi' is not a member of 'std'
int myint = std::stoi(test);
^
然而,根据here https://stackoverflow.com/questions/13589947/how-to-use-c11-stdstoi-with-gcc,这段代码应该可以正常编译。我正在使用线路set(CMAKE_CXX_FLAGS "-std=c++11 -O3")
in my CMakeLists.txt
file.
为什么不编译?
更新:我正在使用gcc
,并运行gcc --version
打印出:
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
在 libstdc++ 中,定义stoi
, stol
等,以及to_string
函数,受条件保护
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
我之前在一个平台(即 Android 上的 Termux)上遇到过这种失败,导致to_string
即使使用 g++ 6.1 和 C++14 标准也不可用。在那种情况下,我只是做了
#define _GLIBCXX_USE_C99 1
在添加任何内容之前,瞧,这些功能突然就存在了。 (你应该把它放在第一位,甚至放在命令行上,而不是在包含之前<string>
,因为另一个标头可能包括<string>
首先,然后它的包含守卫将阻止它看到你的宏。)
我没有调查为什么不首先设置这个宏。显然,如果您希望代码实际工作,这是一个值得关注的问题(在我的例子中,我没有特别注意,但 FWIW 没有问题。)
你应该检查是否_GLIBCXX_USE_C99
未定义,或者如果_GLIBCXX_HAVE_BROKEN_VSWPRINTF
is已定义(MinGW 上可能是这种情况?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)