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

}

您可能会发现这篇文章很有用:必须在构造函数初始化列表中初始化引用成员变量。您可能还需要了解编写类的构造函数之间initialization以及何时编写的区别。assignment

引用 C++ Primer pp455:

某些成员必须在构造函数初始化程序中进行初始化。对于此类成员,在构造函数主体中分配给它们不起作用。没有默认构造函数的类类型的成员以及const 或引用类型的成员必须在构造函数初始化程序中初始化,而不管类型如何。

于 2013-06-03T00:53:27.297 回答