7

そのため、ここでの C++ 参照のセマンティクスをまだ把握しているところです。

メンバーとして参照を持つクラスがあり、コンストラクターで参照を初期化します。

template<class T>
class AVLNode {

private:
       T & data;
public:
       AVLNode(T & newData) {
            data = newData;
        }
};

しかし、コンストラクタ行で次のエラーが発生します。

error: uninitialized reference member ‘AVLNode<int>::data’ [-fpermissive]

私はこれを取得しません。クラスが構築されるとすぐに参照を初期化するので、参照が初期化されていないことに問題はありませんか?

4

1 に答える 1

21

は参照であるためdata、コンストラクター初期化子で初期化する必要があります。

AVLNode(T & newData): data(newData) {

}

この投稿は役に立つかもしれません: reference member variable must be initialized at constructor initialization list。また、クラスのコンストラクターを記述するときのinitializationとの違いを理解する必要がある場合もあります。assignment

C++ Primer pp455 からの引用:

一部のメンバーは、コンストラクター初期化子で初期化する必要があります。このようなメンバーの場合、コンストラクター本体での割り当ては機能しません。既定のコンストラクターを持たないクラス型のメンバーと、const または参照型のメンバーは、型に関係なく、コンストラクター初期化子で初期化する必要があります。

于 2013-06-03T00:53:27.297 に答える