我有一个 C++ 程序,它有一个嵌套类,如下所示
class Outer{
Outer(int val);
private:
class Inner;
std::unique_ptr<Inner> obj;
};
Outer::Outer(int val):obj(Inner::CreateInstance(val))
{
}
我的内部类在另一个文件中,并且有一个私有(private)字符串变量 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 没有在外部构造函数中初始化。How do I initialize mystring from Outer constructor? Even though Inner class initialized the mystring then why do I get this kind of error.
最佳答案
你试过这个吗。您不需要在 Outer 类中进行前向声明。
我假设只是翻转这些类(class)。
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))
{
}
关于c++ - 如何在 C++ 的外部类构造函数中初始化嵌套类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62510700/