首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译错误:'stoi‘不是'std’的成员

编译错误:'stoi‘不是'std’的成员
EN

Stack Overflow用户
提问于 2016-06-26 00:34:10
回答 4查看 53.3K关注 0票数 22

我的代码:

代码语言:javascript
复制
#include <iostream>
#include <string>

int main()
{
    std::string test = "45";
    int myint = std::stoi(test);
    std::cout << myint << '\n';
}

给出编译错误:

代码语言:javascript
复制
error: 'stoi' is not a member of 'std'
     int myint = std::stoi(test);
                 ^

但是,根据这里的说法,这段代码应该编译得很好。我在CMakeLists.txt文件中使用行CMakeLists.txt

为何不编撰呢?

更新:我正在使用gcc,并运行gcc --version输出:

代码语言:javascript
复制
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
EN

Stack Overflow用户

发布于 2016-06-26 01:13:48

在libstdc++中,stoistol等的定义以及to_string函数都由条件保护。

代码语言:javascript
复制
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))

我以前在一个平台(即安卓上的Termux )上遇到过这种失败,导致to_string甚至在g++ 6.1和C++14标准中都不可用。在这种情况下,我刚刚做了

代码语言:javascript
复制
#define _GLIBCXX_USE_C99 1

在包括任何东西之前,突然之间,功能就存在了。(您应该将它放在命令行中,而不是在包含<string>之前,因为另一个头可能首先包含<string>,然后它的包含保护将阻止它看到您的宏。)

我没有调查为什么这个宏一开始就没有被设置。显然,如果您希望您的代码实际工作(在我的例子中,我不是特别的,但是FWIW没有问题),这是一个值得关注的问题。

您应该检查_GLIBCXX_USE_C99是否未定义,或者是否定义了_GLIBCXX_HAVE_BROKEN_VSWPRINTF (在MinGW上可能是这样吗?)

票数 18
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38034197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档