当编译如下代码:在构造函数中初始化嵌套成员的语法?
foo.h中:
#include <memory>
#include <vector>
struct external_class;
struct A {
struct B {
std::vector<external_class> bad_vector;
};
std::vector<external_class> good_vector;
std::shared_ptr<B> b;
A();
};
Foo.cpp中:与-Weffc++
标志(GCC)
#include "foo.h":
struct external_class {}; // implement external_class
A::A() :
good_vector(), // <- easy to initialize via default constructor
b(std::make_shared<B>()) // <- does not involve bad_vector::ctor -> warning
{ }
int main() { A a; }
..我得到的警告
foo.cpp:9:12: warning: ‘A::B::bad_vector’ should be initialized in the member initialization list [-Weffc++]
struct B {
^
这对我来说是完全清楚的,但我不知道该如何摆脱它。
对于依赖的原因,我需要向前声明为external_class
,所以在类初始化是不可能的。我能为A::B
提供一个构造函数和实现它里面foo.cpp
但我还是希望有通过提供A::B::bad_vector
的初始化(类似于A::good_vector
)来初始化A::b
很短的方式。
是吗?什么是语法(我应该用Google寻找解决方案?)或者我必须提供B
的构造函数吗?
@juanchopanza [not true](http://eel.is/c++draft/vector#overview-3) – Barry
也许我必须添加一个东西:'A :: good_vector'真的会是一个问题,没有实际的定义。在我的例子中,它只显示了我想要初始化'A :: B :: bad_vector'的方式。 – frans