为什么string类型导致c++程序不运行?
Why does string type cause c++ program to not run?
我有一个简单的程序,用 C++ 编写,在 Windows 10 机器上,用 MinGW g++ 编译器编译。
我包括 <string>
header,它 运行 没问题。当我包含 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 天前下载的,所以我认为它是最新版本。 (也许不是?)
我有 googled 并浏览了 Whosebug 寻找答案。
我能找到的最接近的问题,这个人放弃并更换了操作系统。
我找到的另一个解决方案是使用 Cygwin 的编译器。我宁愿不这样做,因为我已经有了一个看似不错的编译器。看来MinGW的工具用的够广泛了,我应该可以使用编译器了。
任何其他 forum/blog/etc 资源在转换字符串或调用字符串方法方面存在问题。
注意: 完全相同的代码 运行 在 Ubuntu 16.04 上使用随附的编译器很好。
编辑:
虽然我意识到 "It does not run" 没有帮助,但我不知道如何描述它。我 运行 编译的程序,它的行为与我输入 echo ''
一样。没有输出,没有任何迹象表明发生了什么。表达这种行为最有用的方式是什么?
如果我使用调试器,我会得到 program exited with code 0xc0000139
快速 google 搜索 returns 结果表明它 是 编译器的问题。与下面关于我的编译器版本的评论相同...
为了编译程序,我运行g++ main.cpp -o b.exe
要执行它,我 运行 ./b.exe
Mingw 对某些控制台存在长期存在的问题(请参阅他们的 faq)。可能值得检查它是否无法输出而不是通过例如执行。重定向到文件 ./b.exe >out.txt
.
在一些有用的评论和很多挫折之后,我决定尝试构建最新的编译器。我屈服并使用了Cygwin。 (我真的对 Cygwin 没有问题,我只是想让 MinGW 工作。)
我按照本网站的说明进行操作(从 https://gcc.gnu.org 下载当前源后)。
http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/
备注:
这是针对旧版本的 gcc,但我将相应的版本号替换为 8.2.0(目前为当前版本)。
我缺少一些先决条件,不得不从 Cygwin 终端 cd
进入源目录和 运行 ./contrib/download_prerequisites
。它无缝地处理了所有事情,虽然花了一点时间,但我现在能够使用 string
数据类型和 运行 程序(成功)。
不要忘记最后的 make install
命令。我做了,很头疼。
最后,感谢所有 有帮助的 评论,以及那些要求澄清的评论。当我打电话给机械师并说 "my car won't run" 时,他们会提出有用的问题,然后我们共同努力为他们提供所需的相关信息。这就是上面发生的事情,我学到了一些东西(并解决了我的问题)。
我遇到了同样的问题。几天前我从 sourceforge 下载了 mingw,除了我声明一个字符串之外,一切都很好。然后它会显示没有输出。也许这是旧版本(6.3.0)的一些问题。我删除了所有文件并使用给定的教程重新安装:https://code.visualstudio.com/docs/cpp/config-mingw。这是较新的版本 (8.1.0)。现在一切正常!
我有一个简单的程序,用 C++ 编写,在 Windows 10 机器上,用 MinGW g++ 编译器编译。
我包括 <string>
header,它 运行 没问题。当我包含 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 天前下载的,所以我认为它是最新版本。 (也许不是?)
我有 googled 并浏览了 Whosebug 寻找答案。
我能找到的最接近的问题,这个人放弃并更换了操作系统。
我找到的另一个解决方案是使用 Cygwin 的编译器。我宁愿不这样做,因为我已经有了一个看似不错的编译器。看来MinGW的工具用的够广泛了,我应该可以使用编译器了。
任何其他 forum/blog/etc 资源在转换字符串或调用字符串方法方面存在问题。
注意: 完全相同的代码 运行 在 Ubuntu 16.04 上使用随附的编译器很好。
编辑:
虽然我意识到 "It does not run" 没有帮助,但我不知道如何描述它。我 运行 编译的程序,它的行为与我输入 echo ''
一样。没有输出,没有任何迹象表明发生了什么。表达这种行为最有用的方式是什么?
如果我使用调试器,我会得到 program exited with code 0xc0000139
快速 google 搜索 returns 结果表明它 是 编译器的问题。与下面关于我的编译器版本的评论相同...
为了编译程序,我运行g++ main.cpp -o b.exe
要执行它,我 运行 ./b.exe
Mingw 对某些控制台存在长期存在的问题(请参阅他们的 faq)。可能值得检查它是否无法输出而不是通过例如执行。重定向到文件 ./b.exe >out.txt
.
在一些有用的评论和很多挫折之后,我决定尝试构建最新的编译器。我屈服并使用了Cygwin。 (我真的对 Cygwin 没有问题,我只是想让 MinGW 工作。)
我按照本网站的说明进行操作(从 https://gcc.gnu.org 下载当前源后)。
http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/
备注:
这是针对旧版本的 gcc,但我将相应的版本号替换为 8.2.0(目前为当前版本)。
我缺少一些先决条件,不得不从 Cygwin 终端
cd
进入源目录和 运行./contrib/download_prerequisites
。它无缝地处理了所有事情,虽然花了一点时间,但我现在能够使用string
数据类型和 运行 程序(成功)。不要忘记最后的
make install
命令。我做了,很头疼。
最后,感谢所有 有帮助的 评论,以及那些要求澄清的评论。当我打电话给机械师并说 "my car won't run" 时,他们会提出有用的问题,然后我们共同努力为他们提供所需的相关信息。这就是上面发生的事情,我学到了一些东西(并解决了我的问题)。
我遇到了同样的问题。几天前我从 sourceforge 下载了 mingw,除了我声明一个字符串之外,一切都很好。然后它会显示没有输出。也许这是旧版本(6.3.0)的一些问题。我删除了所有文件并使用给定的教程重新安装:https://code.visualstudio.com/docs/cpp/config-mingw。这是较新的版本 (8.1.0)。现在一切正常!