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