编译错误:“stoi”不是“std”的成员

2024-01-23

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(使用前将#替换为@)

编译错误:“stoi”不是“std”的成员 的相关文章

随机推荐