我的代码:
#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);
^但是,根据这里的说法,这段代码应该编译得很好。我在CMakeLists.txt文件中使用行CMakeLists.txt。
为何不编撰呢?
更新:我正在使用gcc,并运行gcc --version输出:
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010发布于 2016-06-26 01:13:48
在libstdc++中,stoi、stol等的定义以及to_string函数都由条件保护。
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))我以前在一个平台(即安卓上的Termux )上遇到过这种失败,导致to_string甚至在g++ 6.1和C++14标准中都不可用。在这种情况下,我刚刚做了
#define _GLIBCXX_USE_C99 1在包括任何东西之前,突然之间,功能就存在了。(您应该将它放在命令行中,而不是在包含<string>之前,因为另一个头可能首先包含<string>,然后它的包含保护将阻止它看到您的宏。)
我没有调查为什么这个宏一开始就没有被设置。显然,如果您希望您的代码实际工作(在我的例子中,我不是特别的,但是FWIW没有问题),这是一个值得关注的问题。
您应该检查_GLIBCXX_USE_C99是否未定义,或者是否定义了_GLIBCXX_HAVE_BROKEN_VSWPRINTF (在MinGW上可能是这样吗?)
https://stackoverflow.com/questions/38034197
复制相似问题