私のコードを何度も簡素化した後、私は次のような問題を発見しました。会員初期化リストの順
class B {
public:
B(const int x)
:_x(x) {}
const int _x;
};
class C {
public:
C(const B& b)
: _b(b), _b2(_b._x) {}
B _b2; // line 1
const B& _b; // line 2
};
int main() {
B b(1);
C c(b);
}
警告(打ち鳴らす8.0.0)
test16.cpp:11:22: warning: reference '_b' is not yet bound to a value when used here [-Wuninitialized]
: _b(b), _b2(_b._x) {}
^
1 warning generated.
グラム++ - 図6は、プログラムをコンパイル。プログラムを実行すると、セグメント化エラーが発生します。
クラスのメンバーの初期化は、メンバー初期化リスト(: _b(b), _b2(_b._x)
)の順番またはクラス内のメンバーの順番(たとえばB _b2; const B& _b;
)に従っていますか?
を初期化され、_b2は、パブリックメンバーと_bましたプライベートメンバーだった。私は通常プライベートセクションの前に公開セクションを書く... –