當編譯如下代碼:在構造函數中初始化嵌套成員的語法?
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