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

标签 c++ c++11 coding-style c++14 misra

我有一个 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/

相关文章:

c++ - Qt:在缓慢启动时显示窗口内容

c++ - 无法使用 gcc 编译 C++

c++ - 是否可以在 using 声明中引用用户定义的转换模板?

c++ - 为什么 std::forward 会丢弃 constexpr-ness?

c++ - 使用 `dynamic_cast` 来推断在基类上定义并在派生类上实现的成员函数的参数类型是否正确?

c++ - 有没有什么方法可以在没有 std::move 的情况下调用 C++ 中的移动赋值运算符?

java - 哪个更快,或者它只是被认为是错误的代码

c++ - 如何实现继承已知类的未知类的拷贝

Java返回对象/修改对象(编码指南)

coding-style - 将字符放在结束语句之后 - 除了可读性之外还有其他好处吗?