我在尝试执行cout是一个字符串对象的简单程序时遇到运行时崩溃,我正在使用Borland C ++ Compiler 5.5版,代码如下:
#include <iostream>
#include <string> // Usaremos as funcoes mais modernas de String em C++
#include <conio.h>
using namespace std;
// <Prototipos >
int MenuPrincipal(void);
void DesenharCentralizado(string String, int CoordY);
// </Prototipos>
int main() {
while(MenuPrincipal() != 0); // Para sair, ele deve retornar 0
return 0;
}
int MenuPrincipal(void) {
string Titulo = "Agenda";
clrscr();
DesenharCentralizado(Titulo, 4);
getch();
return 0;
}
void DesenharCentralizado(string Frase, int CoordY) {
int PosX=wherex(), PosY=wherey();
gotoxy((80-Frase.length())/2, CoordY);
cout << Frase; // XXX CRASH
gotoxy(PosX, PosY);
}
PS:请不要抱怨使用旧的conio.h和这些东西,这些是我的C ++课程,我的老师教我们先用它...
答案 0 :(得分:2)
如果您注释掉文件中的所有内容并将其替换为
#include <iostream>
int main() { std::cout << "Hello, world!"; }
有效吗?如果是,请尝试
#include <iostream>
#include <string>
int main() { std::cout << std::string( "Hello, world!" ); }
删除<conio.h>
并调用其函数后,您的程序非常简单,可以指示工具链损坏,并且一次添加一个功能可能有助于追踪已损坏的内容。它可能是一个不正确的运行时库版本,或者在安装Borland或项目文件时出现某种损坏。
通过一次一步地重新创建项目,您要么追踪原因,要么最终得到一个工作项目,此时您可以忘记问题。
答案 1 :(得分:1)
Borland 5.5。只有std::string
的部分支持。
在这种特殊情况下,您的代码可能会受到责备,但即便如此,您也无法在任何地方(并且您将无法获得更快的速度)尝试在该编译器中使用std::string
。
如果您的老师要求您使用Borland 5.5,那么您的老师正在努力教他或她自己,因为他/她在教您。这种方法有时可以,但请将您的老师送到这里。现在,到wingleader的老师:
Borland 5.5是一个破碎的工具。它不仅仅是预先标准的:它已经被破坏了。学生不会从使用它中学到任何积极的东西,就像试图学习弹钢琴一样严重失调的钢琴。
如果你必须支持15岁的计算机(或更老版本),那么可以使用g ++ 2.95或Visual C ++ 6.0。否则,使用免费的现代工具,如(截至2012年)MinGW g ++ 4.6或更新版本,或Visual C ++ 10.0或更新版本。新的编译器(尽管不是Visual Studio Express IDE)即使在只有265 MB RAM的计算机上运行也很好,截至2012年,它包含了几十年前的PC。 Code :: Blocks是旧Windows计算机的一个很好的IDE。