基类内部结构体的const成员初始化问题求助
解决方案
问题核心在于Helper的const std::wstring manager是const成员,无法直接在Base的构造函数初始化列表中单独初始化它的内部成员。必须给Helper添加构造函数,通过构造函数来完成其const成员的初始化。
修改后的代码如下:
struct Helper { const std::wstring manager; // 其他成员变量 // 添加构造函数,初始化const成员 explicit Helper(const std::wstring& mgr) : manager(mgr) {} }; class __declspec(dllexport) Base { protected: Helper m_impl; int m_id; // 其他成员变量 public: // 通过Helper的构造函数初始化m_impl Base(int id, const std::wstring &manager) : m_id(id), m_impl(manager) {} }; class Derived : public Base { public: Derived(int id, const std::wstring &manager) : Base(id, manager) {} };
关键说明
- 给
Helper添加显式构造函数,用传入的std::wstring参数初始化const成员manager,这是C++中初始化const成员的标准合规方式。 - 在
Base的构造函数初始化列表中,直接调用Helper的构造函数完成m_impl的整体初始化,避开了直接访问成员对象内部成员的限制。 - 该修改完全保留了用
Helper封装std::wstring以避免导出警告的设计初衷。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

