1

文字列オブジェクトをcoutする単純なプログラムを実行しようとすると、実行時にクラッシュします。次のコードでBorlandC++コンパイラバージョン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>て呼び出すことで、プログラムは壊れたツールチェーンを示すのに十分簡単であり、一度に1つずつ機能を追加すると、壊れたものを追跡するのに役立つ場合があります。ランタイムライブラリのバージョンが正しくないか、Borlandまたはプロジェクトファイルのインストールに何らかの破損がある可能性があります。

プロジェクトを一度に1ステップずつ再作成することで、原因を突き止めるか、プロジェクトが機能するようになり、その時点で問題を忘れることができます。

于 2012-04-22T02:35:16.457 に答える
1

ボーランド5.5。の部分的なサポートしかありませんでしたstd::string

std::stringこの特定のケースでは、コードが原因である可能性がありますが、それでも、そのコンパイラで使用しようとすると、どこにも到達できません(そして、どこにも速く到達できません) 。

あなたの先生があなたにBorland5.5を使うように要求するなら、あなたの先生は彼/彼女があなたに教えているように彼/彼女自身を教えようとしています。そのアプローチは時々大丈夫です、しかしあなたの先生をここに送ってください。さて、ウィングリーダーの先生に:

Borland5.5は壊れたツールです。それは単なる先行標準ではありません:それは壊れています。ひどく調子が悪いピアノでピアノを弾くことを学ぼうとするのと同じように、学生はそれを使うことから何も前向きなことを学ぶことはありません。

15年前(またはそれ以前)のコンピューターをサポートする必要がある場合は、おそらくg++2.95またはVisualC++6.0を使用してください。それ以外の場合は、(2012年現在)MinGW g++4.6以降またはVisualC++10.0以降などの無料の最新ツールを使用してください。新しいコンパイラ(Visual Studio Express IDEではありません)は、RAMが265 MBしかないコンピューターでも正常に動作します。これには、2012年の時点で約10年前のPCが含まれています。Code :: Blocksは、古いWindowsコンピューターに適したIDEです。

于 2012-04-22T07:14:11.607 に答える