错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

奥古斯丁圣地亚哥

我已经搜索了很长一段时间,找不到适合我的人。抱歉,如果这是重复的。

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么字段似乎在构造函数之前初始化?

当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

Kotlin:在构造函数中初始化类属性

为什么在构造函数初始化类的属性时声明其属性

在构造函数中初始化变量后进行验证:为什么不这样做呢?

为什么对象的初始化调用复制构造函数?

为什么派生类的构造函数要在C ++中初始化虚拟基类?

为什么final可以在构造函数中初始化?

为什么我的值未由初始化(参数化)构造函数初始化?

为什么我的构造函数不像应有的那样初始化其超类属性?

为什么基类的成员不保留构造函数中首次初始化的值?

使用另一个构造函数的初始化来初始化构造函数中的属性

为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

vscode中的C ++:错误:没有匹配的构造函数来初始化'std :: thread'

为什么一些最近添加的字段没有被构造函数初始化

为什么我们在构造函数中初始化对象

错误C2512:没有适当的默认构造函数(不是类)

C ++错误C2512:没有适当的默认构造函数

C ++新手错误C2512:没有适当的默认构造函数可用

C ++模板类“没有合适的默认构造函数”

在构造函数中初始化EF POCO标量属性

C2512 错误 - 即使没有初始化类

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

没有合适的默认构造函数可用

为什么 React Component 函数构造函数中的方法在组件初始化后进行评估?

C++ 没有合适的默认构造函数我迷路了

属性没有初始化器,并且在构造函数中没有明确赋值

为什么在堆数组初始化中调用了两次复制构造函数?

c++ 中的初始化没有匹配的构造函数错误。我的构造函数有什么问题?