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

标签 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++ 的新手。

最佳答案

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

关于c++ - 为什么将类作为参数传递需要默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57113450/

相关文章:

c++ - MinGW下使用makefile编译所有CPP文件

c++ - 将浮点值从 Objective-C 传递到 C++ 方法

c++ - 为什么 Nvenc Encoder 可以提高解码速度?

javascript - typescript :从方法参数中调用方法

Java 构造函数参数不匹配

c++ - 处理构造函数的条件参数

c++ - 为什么要使外部变量成为引用?

Ruby 实例方法和变量

java - Android:类中的 SharedPreferences PreferenceManager.getDefaultSharedPreferences

Java 与构造函数中参数传递的混淆