【问题标题】:Error with stoi and debugged with gdb [closed]stoi 出错并使用 gdb 调试 [关闭]
【发布时间】:2015-06-17 20:08:06
【问题描述】:

我的操作系统是 ubuntu 14.04,笔记本电脑,i7。

g++ 版本为g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2

我尝试运行一个简单的代码来测试stoi

#include <string>
int main() 
{
   std::string s = "123";
   int i = std::stoi(s);
}

当我用:g++ -g prueba2.cpp 编译它时,我得到:

prueba2.cpp: In function ‘int main()’:
prueba2.cpp:6:12: error: ‘stoi’ is not a member of ‘std’
    int i = std::stoi(s);
            ^

当我首先使用g++ -std=c++0x -g prueba2.cpp(我也尝试使用-std=c++11)和dbg 对其进行两次调试时,我得到了:

然后,我也做了一个简单的搜索,并按照here1here2here3 中的建议进行了操作,但都没有成功。

我在做傻事吗?

【问题讨论】:

  • 如果编译器给你一个致命错误,是什么让你认为它输出了可运行的代码?
  • 那么,问题出在哪里?它是否编译?
  • 我该如何解决?我需要更多线索
  • 如果你使用g++ -std=c++11 -g prueba2.cpp,它编译了吗?如果不是,那是什么错误?
  • 您的代码编译良好,您收到了exited normally 消息。那么,有什么问题呢?

标签: c++ c++11 segmentation-fault coredump


【解决方案1】:

是的,我认为你在做一些非常愚蠢的事情。您可能编译了没有std::cout 语句的第一个代码,并且您可能在没有-std=c++11 的情况下执行了编译步骤,这将导致std::stoi 不被包含,因为std::stoi 来自C++11 和向前。结果仍然是旧的可执行文件,它什么也没打印出来。

使用-std=c++11 重新编译并确保您正确保存了文件。 Your code clearly works.

注意:Windows 上 MinGW 的 GCC 的 vanilla 端口存在缺陷,并且存在一些与 C++11 及更高版本相关的错误;使用 MinGW-w64,如果您决定在 Windows 上编译,可以帮助解决问题。

【讨论】:

  • 是的,就像你说的那样正常工作
  • 乐于助人总是很好。
【解决方案2】:

std::stoi 是 C++11 功能。因此,只有在您使用 -std=c++11 标志(或您提到的等效 -std=c++0x 标志,它与调试无关)时,您的代码才会编译。

您提供的终端会话还显示编译可以使用这些标志,并且您的程序运行良好,没有任何问题。如果要打印解析后的结果,可以这样:std::cout &lt;&lt; i &lt;&lt; std::endl

如果您不想使用 C++11 功能,可以使用 &gt;&gt; 流运算符将字符串解析为 int

stringstream ss(s);
int i;
ss >> n;

但请注意:除了stoi,如果您的输入不包含有效数字,您不会收到异常。您必须自己检查流的状态。

【讨论】:

  • 好的,明白了,它生成文件到gdb。不过,您的答案不是解决方案。我该如何解决stoi的一般问题?
  • 什么是“一般问题”?它工作正常。就用它吧。如果你不想用 C++11 编译,你可以使用流操作符来解析你的输入。
  • @beginner 什么是“stoi 的一般问题”,您的代码中没有问题。
  • 当我添加 std::cout &lt;&lt; i &lt;&lt; "\n"; 时,它什么也不打印。
  • @beginner:是的,确实如此:cpp.sh/3mfsf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2017-03-17
  • 2012-08-19
相关资源
最近更新 更多