1

当我尝试执行一个 cout 是一个字符串对象的简单程序时,我在运行时遇到了崩溃,我正在使用带有以下代码的 Borland C++ 编译器 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++ 课,我的老师正在教我们先使用它......

4

2 回答 2

2

如果您注释掉文件中的所有内容并将其替换为

#include <iostream>
int main() { std::cout << "Hello, world!"; }

那样有用吗?如果是,那么试试

#include <iostream>
#include <string>
int main() { std::cout << std::string( "Hello, world!" ); }

通过删除<conio.h>和调用它的函数,你的程序很简单,可以指示一个损坏的工具链,并且一次添加一个功能可能有助于追踪损坏的地方。这可能是错误的运行时库版本,或者是 Borland 安装或项目文件中的某种损坏。

通过一步一步地重新创建项目,您将追查原因,或者最终得到一个工作项目,此时您可以忘记问题。

于 2012-04-22T02:35:16.457 回答
1

宝兰 5.5。仅部分支持std::string.

std::string在这种特殊情况下,您的代码很可能是罪魁祸首,但即便如此,尝试与该编译器一起使用时,您将一事无成(而且您将一事无成) 。

如果您的老师要求您使用 Borland 5.5,那么您的老师正在尝试教他或她自己,因为他/她正在教您。这种方法有时还可以,但请把你的老师送到这里。现在,对队长的老师:

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。

于 2012-04-22T07:14:11.607 回答