c++ - 为什么将类作为参数传递需要默认构造函数?
问题描述
我定义了一个将自定义结构作为构造函数参数的对象 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++ 相当陌生。
解决方案
该问题与将对象作为参数传递给函数或构造函数无关。问题是您已经定义了数据成员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 )
{
}
推荐阅读
- python - 如何使用时间戳间隔条件加速 python 循环
- angular - Ionic 4 angular data.map 不是函数
- javascript - 创建易于访问的 Facebook 分享按钮
- ckeditor - 如何从代码中触发 CKEditor 5 图像文件系统对话框?
- php - Convert complex string to array, multiple times by multiple delimiters
- android - 无法创建类 ViewModel 的实例
- c# - Blazor 选择绑定到列表中的值
- symfony - 您在 Symfony 4 应用程序中将用户上传的内容存储在哪里?
- c# - 在 Visual Studio 中为 5 节点群集调试 Azure Service Fabric 应用程序
- php - 显示会话数组变量值显示在一个页面上而不是另一个页面上 - php