【问题标题】:C++ passing an objectC++ 传递一个对象
【发布时间】:2013-04-28 19:54:26
【问题描述】:

我目前正在学习 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;我在互联网上查找了一些示例,但找不到解决方案。

【问题讨论】:

  • 如何初始化BowlingGame* ScoreCalculator::game?

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


【解决方案1】:

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

【讨论】:

  • +1 是一个很好的答案,但我认为一些代码示例可以帮助提问者理解。
【解决方案2】:
//* game = gamse; this fails

你还没有为game 分配任何东西。它只是一个指针,还没有指向任何有效的东西。您必须创建一个新的 Game 对象以使其指向。

这样做

game = new Game(gamse);

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

另外,如果您不再需要它,请不要忘记在您的析构函数或更早的时候 delete game。或者更好地将smart pointer 用于“游戏”。

【讨论】:

  • 并且不要忘记在破坏对象时释放游戏! smart_ptr 也许?
猜你喜欢
  • 2015-09-15
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多