如何在 C++ 的外部类构造函数中初始化嵌套类成员

How to initalize nested class members in outer class constructor in C++

本文关键字:构造函数 嵌套 成员 初始化 外部 C++      更新时间:2023-10-16

我在C++中有一个程序,它有一个嵌套的类,如下所示

class Outer{
Outer(int val);
private:
class Inner;
std::unique_ptr<Inner> obj;
};
Outer::Outer(int val):obj(Inner::CreateInstance(val)) 
{
}

我的内部类在另一个文件中,并且有一个私有字符串变量 mystring,如下所示

class Inner{
public:
Inner(int val):mVal(val), mystring(""){
}
static std::unique_ptr<Inner> CreateInstance(int val){
// returns Inner unique ptr
}
private:
int mVal
string mystring;
};

这里 mVal 和 mystring 已经在内部类构造函数中初始化。但是我收到这个 MISRA 错误,说 mystring 未在外部构造函数中初始化。

如何从外部构造函数初始化 mystring? 即使内部类初始化了mystring,为什么我会收到这种错误。

你试过这个吗?不需要在外部类中具有前向声明。 我假设只是翻转这些类。

class Inner{
public:
Inner(int val):mVal(val), mystring(""){
}
static std::unique_ptr<Inner> CreateInstance(int val){
// returns Inner unique ptr
/* I am using an arbitrary integer as an example */
return std::make_unique<Inner>(10);
}
private:
int mVal;
std::string mystring;
};

class Outer{
Outer(int val);
private:
std::unique_ptr<Inner> obj;
};
Outer::Outer(int val):obj(Inner::CreateInstance(val))
{
}