1

現在 C++ を学習していますが、期待どおりに動作しません。BowlingGame (テキストベースのもの) 用にいくつかのクラスを作成しましたが、それはうまく機能します。しかし今、BowlingGame のオブジェクトを ScoreCalculator という別のクラスに渡したいと考えています。

ヘッダー ファイルは次のようになります。

#ifndef SCORECALCULATOR_H
#define SCORECALCULATOR_H
#include "BowlingGame.h"

class ScoreCalculator {
private:
    BowlingGame * game;
public:
    //constructor
    ScoreCalculator(const BowlingGame &game);

    //setters
    void setGame(const BowlingGame &game);
};

#endif // SCORECALCULATOR_H

実装は次のようになります。

#include "ScoreCalculator.h"
#include "BowlingGame.h"
#include <iostream>

using namespace std;

ScoreCalculator::ScoreCalculator(const BowlingGame &game) {
    setGame(game);
}

void ScoreCalculator::setGame(const BowlingGame &gamse) {
    //* game = gamse; this fails
    //cout << gamse.getLastFrameNummer(); this works
}

「BowlingGame オブジェクト」をインスタンス var game に保存したいのですが、何らかの理由でコンソール アプリケーションがクラッシュします。何が間違っているのかわかりません。失敗はルール * game = gamse;にあります。インターネットでいくつかの例を調べましたが、解決策が見つかりません。

4

2 に答える 2

1

ここでの問題は、ポインタを割り当てていないことです。BowlingGame game;ヘッダーのように「ゲーム」を定義してみませんか? このようにして、他のコードが機能します。これは、BowlingGame 構造がクラス内の構造に「コピー」されることを意味しますが、これは目的のように聞こえます。

于 2013-05-04T14:33:45.403 に答える
-1
//* game = gamse; this fails

には何も割り当てていませんgame。まだ有効なものを指していない単なるポインタです。Gameそれが指す新しいオブジェクトを作成する必要があります。

このようにしてください

game = new Game(gamse);

Gameアクセス可能なコピーコンストラクターがあると仮定します。

deleteまた、必要がなくなった場合は、デストラクタまたはそれ以前にゲームすることを忘れないでください。または、`game .

于 2013-05-04T14:36:24.407 に答える