如何初始化C+中外部类构造函数中的嵌套类成员+; 我有一个C++程序,它有一个嵌套类,如下面的 class Outer{ Outer(int val); private: class Inner; std::unique_ptr<Inner> obj; }; Outer::Outer(int val):obj(Inner::CreateInstance(val)) { } 类外部{ 外部(int-val); 私人: 阶级内部; std::唯一对象; }; 外部::外部(int val):对象(内部::CreateInstance(val)) { }

如何初始化C+中外部类构造函数中的嵌套类成员+; 我有一个C++程序,它有一个嵌套类,如下面的 class Outer{ Outer(int val); private: class Inner; std::unique_ptr<Inner> obj; }; Outer::Outer(int val):obj(Inner::CreateInstance(val)) { } 类外部{ 外部(int-val); 私人: 阶级内部; std::唯一对象; }; 外部::外部(int val):对象(内部::CreateInstance(val)) { },c++,c++11,coding-style,c++14,misra,C++,C++11,Coding Style,C++14,Misra,我的内部类位于另一个文件中,有一个私有字符串变量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 st

我的内部类位于另一个文件中,有一个私有字符串变量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;
};
类内部{
公众:
内部(int-val):mVal(val),mystring(“”){
}
静态std::unique_ptr CreateInstance(int val){
//返回内部唯一ptr
}
私人:
int mVal
字符串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))
{

}
类内部{
公众:
内部(int-val):mVal(val),mystring(“”){
}
静态std::unique_ptr CreateInstance(int val){
//返回内部唯一ptr
/*我以任意整数为例*/
返回标准::使_唯一(10);
}
私人:
int-mVal;
std::string mystring;
};
类外部{
外部(int-val);
私人:
std::唯一对象;
};
外部::外部(int val):对象(内部::CreateInstance(val))
{
}

您尝试过这个吗。您不需要在外部类中有转发声明。 我想,只要把这些类翻过来就行了

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))
{

}
类内部{
公众:
内部(int-val):mVal(val),mystring(“”){
}
静态std::unique_ptr CreateInstance(int val){
//返回内部唯一ptr
/*我以任意整数为例*/
返回标准::使_唯一(10);
}
私人:
int-mVal;
std::string mystring;
};
类外部{
外部(int-val);
私人:
std::唯一对象;
};
外部::外部(int val):对象(内部::CreateInstance(val))
{
}

您真的可以在MISRA-C++中使用智能指针/动态分配吗?我对此深表怀疑。我也怀疑除了C++03之外,你是否可以使用任何东西。是的,我们可以。MISRA错误是在我的代码基于C++ 11/14之上的。从一个文件中,“文件,被称为MISRA C++指南,用于在关键系统中使用C++语言”,2008年6月5日发布并正式启动。“没有后面提到的版本。因此,当MISRA C++指南发布时,它们不可能包括C++ 11和以后。因此,无论如何使用C++ 11/14可能会破坏我们在MISRA使用中的信任(因为指南只针对以前的C++版本编写)。用于生成上述错误的工具还包括AutoSar指南和MISRA。我的不好。但是,如何从外部构造函数初始化mystring?您真的可以在MISRA-C++中使用智能指针/动态分配吗?我对此深表怀疑。我也怀疑除了C++03之外,你是否可以使用任何东西。是的,我们可以。MISRA错误是在我的代码基于C++ 11/14之上的。从一个文件中,“文件,被称为MISRA C++指南,用于在关键系统中使用C++语言”,2008年6月5日发布并正式启动。“没有后面提到的版本。因此,当MISRA C++指南发布时,它们不可能包括C++ 11和以后。因此,无论如何使用C++ 11/14可能会破坏我们在MISRA使用中的信任(因为指南只针对以前的C++版本编写)。用于生成上述错误的工具还包括AutoSar指南和MISRA。我的错误。但是,如何从外部构造函数初始化mystring?