我有一个简单的程序,用Windows 10计算机上的C ++编写,并用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天前下载了它,因此我认为它是最新版本。 (也许不是吗?)
我已经搜索并浏览了stackoverflow以获取答案。
我找到的最接近的问题是,该人放弃了并改变了操作系统。
我发现的另一个解决方案是使用Cygwin的编译器。我宁愿不要,因为我已经有了一个看似不错的编译器。看来MinGW工具已被广泛使用,以至于我应该能够使用编译器。
任何其他论坛/博客/等资源都存在有关转换字符串或调用字符串方法的问题。
注意:使用包含的编译器,在Ubuntu 16.04上可以运行相同的精确代码。
编辑:
虽然我意识到“它不会运行”没有帮助,但我不知道该如何描述它。我运行编译后的程序,其行为与输入echo ''
相同。没有输出,没有任何提示。用什么最有效的方式表达这种行为?
如果我使用调试器,则会得到program exited with code 0xc0000139
谷歌快速搜索返回的结果表明它 是编译器的问题。与下面关于我的编译器版本的评论相同...
要编译程序,我运行g++ main.cpp -o b.exe
要执行它,我运行./b.exe
答案 0 :(得分:0)
Mingw在某些控制台上存在长期的问题(请参见其faq)。可能值得检查它是否输出失败而不是通过例如重定向到文件abc=(thing1 thing2 thing3 thing4)
for j in C I; do
for i in 0 1 2 3; do
echo "grep 'ITEM_${abc[i]}' /folder1/folder2/THING_$jS_$i.sorted/585_10$jS_$i.sorted.gtf"
done
done
。
答案 1 :(得分: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
命令。我做到了,这很头疼。
最后,感谢所有有用的评论以及要求澄清的评论。当我打电话给机械师并说“我的汽车无法行驶”时,他们会提出有益的问题,我们将共同努力,为他们提供所需的相关信息。上面就是这样,我学到了一些东西(并解决了我的问题)。
答案 2 :(得分:0)
我遇到了同样的问题。我从 sourceforge 下载了 mingw 几天,除了我声明一个字符串外,一切都很好。然后它不会显示任何输出。也许是旧版本(6.3.0)有问题。我删除了所有文件并使用给定的教程重新安装:https://code.visualstudio.com/docs/cpp/config-mingw。这是一个较新的版本 (8.1.0)。现在它工作得很好!