我已经搜索了很长一段时间,找不到适合我的人。抱歉,如果这是重复的。
我有一个Game类,在Game.h中定义:
class Game
{
public:
Game(int argc, char **argv);
~Game();
private:
Logger logger;
Stage stage;
Engine engine;
};
然后在Game.cpp中:
Game::Game(int argc, char **argv)
{
// Some code removed for clarity. Consider filename and bitsPerPixel
// already defined.
string fileName;
if (argc != 2){
fileName = defaultYAMLFilename;
logger.logBadParam(argc, fileName);
} else {
fileName = argv[1];
}
logger = Logger();
stage = Stage(fileName);
engine = Engine(stage.getWidthPx(), stage.getHeightPx(), bitsPerPixel, stage.getTimeStep());
}
然后我得到这个错误:
game.cpp(7):错误C2512:“ WormsModel :: Stage”:没有合适的默认构造函数
game.cpp(7):错误C2512:“引擎”:没有合适的默认构造函数
为什么要在构造函数中初始化属性? 好的,我了解Chris对初始化列表的评论。我如何设法评估argc以及用于初始化Stage的所有内容?
只要您在类中有字段,就存在没有参数的隐式构造。如果要使用非默认构造函数初始化字段,则必须使用初始化程序,如下所示:
Game::Game(int argc, char **argv) : logger(),
stage(fileName),
engine(stage.getWidthPx(),
stage.getHeightPx(),
bitsPerPixel,
stage.getTimeStep())
{
/* remainder of constructor here */
}
除了这不太可能,因为您可能在构造函数中做了一些初始化fileName
和初始化的工作bitsPerPixel
。但这是您遇到的问题。您如何解决它取决于您。
每个构造函数都必须为类中的每个字段调用一个构造函数。如果您不指定哪个构造函数,它将是默认值。但是,您可以使字段指针指向对象。然后,它们可以初始化为NULL,您可以在构造函数中使用new创建它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句