我目前正在学习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;
我在互联网上查了一些例子,但找不到解决方案。
答案 0 :(得分:1)
这里的问题是你没有分配你的指针。为什么不在标题中将“游戏”定义为BowlingGame game;
?这样你的其他代码就可以了。这意味着BowlingGame结构被“复制”到了班级中的一个,但这听起来就像你所追求的那样。
答案 1 :(得分:-1)
//* game = gamse; this fails
您尚未为game
分配任何内容。它只是一个指针,指向任何有效的东西。您必须创建一个新的Game
对象才能指向它。
这样做
game = new Game(gamse);
假设Game
具有可访问的复制构造函数。
另外,如果你不再需要它,请不要忘记你的析构函数中的delete
游戏。或者甚至更好地使用smart pointer进行游戏。