为什么将类作为参数传递需要默认的构造函数?

时间:2019-07-19 13:24:42

标签: c++ class constructor initialization default-constructor

我定义一个对象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 ++的新手。

1 个答案:

答案 0 :(得分:4)

问题与将对象作为参数传递给函数或构造函数无关。问题是您已经定义了数据成员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 )
{
}