为什么字符串类型会导致c ++程序无法运行?

问题描述 投票:0回答:2

我有一个简单的程序,用C ++编写,在Windows 10机器上,用MinGW g ++编译器编译。

我包括<string>标题,它运行正常。当我包含string数据类型时,它将编译,但它不会运行。

重现这一点的最小代码量是:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string greeting;
    cout << "hi" << endl;
    return 1;
}

请注意,这很好用:

#include <iostream>
#include <string>
using namespace std;

int main() {
    //string greeting;
    cout << "hi" << endl;
    return 1;
}

编译器的版本是6.3.0 g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0

我3天前下载了它,所以我认为它是最新版本。 (也许不吧?)

我用Google搜索并浏览了stackoverflow以获得答案。

我能找到的最接近的问题是,这个人放弃并改变了操作系统。

我发现的另一个解决方案是使用Cygwin的编译器。我宁愿不,因为我已经有一个看似很好的编译器。似乎MinGW工具已被广泛使用,我应该能够使用编译器。

任何其他论坛/博客/等资源都有关于转换字符串或调用字符串方法的问题。

注意:相同的确切代码在Ubuntu 16.04上运行正常,包含的编译器。

EDITS:

虽然我意识到“它没有运行”没有用,但我不知道如何描述它。我运行已编译的程序,它的行为与我输入echo ''时的行为相同。没有输出,没有迹象表明发生了任何事情。说出这种行为最有用的方法是什么?

如果我使用调试器,我会得到program exited with code 0xc0000139

快速谷歌搜索返回结果表明它是编译器的问题。与下面关于我的编译器版本的评论相同......

要编译程序,我运行g++ main.cpp -o b.exe要执行它,我运行./b.exe

c++ mingw
2个回答
0
投票

Mingw对某些游戏机存在长期问题(参见他们的faq)。可能值得检查它是否输出失败而不是通过例如执行来执行。重定向到文件./b.exe >out.txt


0
投票

经过一些有用的评论和挫折之后,我决定尝试构建最新的编译器。我陷入困境并使用了Cygwin。 (我对Cygwin没有任何问题,我只想让MinGW工作。)

我按照本网站的说明(从https://gcc.gnu.org下载当前来源后)。

http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/

笔记:

  • 这是针对旧版本的gcc,但我用8.2.0替换了相应的版本号(目前为当前版本)。
  • 我缺少一些先决条件,并且必须将cd放入源目录并从Cygwin终端运行./contrib/download_prerequisites。它无缝地处理了所有内容,虽然花了一点点,但我现在能够使用string数据类型并运行程序(成功)。
  • 不要忘记最后的make install命令。我做了,这很头疼。

最后,感谢所有有用的评论,以及那些要求澄清的评论。当我给机械师打电话,并说“我的车不会跑”时,他们会提出有用的问题,我们会一起努力为他们提供所需的相关信息。这就是上面发生的事情,我学到了一些东西(并解决了我的问题)。

© www.soinside.com 2019 - 2024. All rights reserved.