必须初始化字段值

时间:2017-12-30 14:46:49

标签: c++

考虑我的类定义,它是Ring<T>的嵌套类:

template<class T>
class Ring<T>::Iterator{
private:
    int i_pos;
    Ring<T> &value;
public:
    Iterator(int index, Ring<T> &other) :  i_pos(index){
        value = other;
    }
};

构造函数抛出一个错误,必须初始化value。所以我的猜测是,由于Iterator位于类Ring中,我们必须首先初始化Ring<T>对象,然后再构建它的内部类Iterator,我是正确?

Iterator(int index, Ring<T> &other) : value(other), i_pos(index){
    }

1 个答案:

答案 0 :(得分:3)

初始化变量与分配给变量之间存在很大差异。

您正在做什么

Iterator(int index, Ring<T> &other) : value(other), i_pos(index){
}

正在初始化变量valuei_pos

当你这样做时

Iterator(int index, Ring<T> &other) :  i_pos(index){
    value = other;
}

初始化i_pos,但是你尝试在构造函数体内分配变量value(在完成所有构造和初始化后调用它)。

正如您应该知道的那样,您无法分配参考。必须初始化参考。这是因为对(初始化的)引用的任何访问都会对引用的数据执行操作,引用变量引用的内容。

详细说明,请参阅此示例代码:

int a, b = 5;
int& r = a;  // Make r reference a

r = b;  // Assign the value of b to the variable a, equal to a = b