C ++传递一个对象

时间:2013-05-04 14:31:27

标签: c++ object pass-by-reference

我目前正在学习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
}

我想在实例var游戏中保存'BowlingGame对象',但由于某种原因我的控制台应用程序崩溃了。我不知道我做错了什么。失败在于规则: * game = gamse;我在互联网上查了一些例子,但找不到解决方案。

2 个答案:

答案 0 :(得分:1)

这里的问题是你没有分配你的指针。为什么不在标题中将“游戏”定义为BowlingGame game;?这样你的其他代码就可以了。这意味着BowlingGame结构被“复制”到了班级中的一个,但这听起来就像你所追求的那样。

答案 1 :(得分:-1)

//* game = gamse; this fails

您尚未为game分配任何内容。它只是一个指针,指向任何有效的东西。您必须创建一个新的Game对象才能指向它。

这样做

game = new Game(gamse);

假设Game具有可访问的复制构造函数。

另外,如果你不再需要它,请不要忘记你的析构函数中的delete游戏。或者甚至更好地使用smart pointer进行游戏。