首页 > 解决方案 > 为什么将类作为参数传递需要默认构造函数?

问题描述

我定义了一个将自定义结构作为构造函数参数的对象 LogManager:

typedef struct{
    ...
} logSettings;

class LogManager
{
    public:
    LogManager(logSettings logsettings);
};

然后我定义另一个以 LogManager 作为参数的对象:

class Core
{
    private:
    LogManager m_logmanager;

    public:
    Core(LogManager logmanager);
};

Core::Core(LogManager logmanager){//error here
    m_logmanager = logmanager;
}

我的 IDE 给了我错误“类“LogManager”不存在默认构造函数”。没错,但为什么我需要一个默认构造函数?logmanager 已经是 LogManager() 类型。当我调用我的构造函数 Core(LogManager logmanager) 时,应该已经调用了 logmanager 的构造函数。我没有尝试创建新对象,只是获取对现有 LogManager 的引用。

我错过了什么?我对 C++ 相当陌生。

标签: c++classconstructorinitializationdefault-constructor

解决方案


该问题与将对象作为参数传递给函数或构造函数无关。问题是您已经定义了数据成员m_logmanager

class Core
{
    private:
    LogManager m_logmanager;

    public:
    Core(LogManager logmanager);
};

它是在类的构造函数的主体Core获得控制之前使用默认构造函数创建的。

像这样写构造函数

Core::Core(LogManager logmanager) : m_logmanager( logmanager )
{
}

甚至更好地声明它

Core::Core( const LogManager &logmanager) : m_logmanager( logmanager )
{
}

推荐阅读