考虑我的类定义,它是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){
}
答案 0 :(得分:3)
初始化变量与将分配给变量之间存在很大差异。
您正在做什么
Iterator(int index, Ring<T> &other) : value(other), i_pos(index){
}
正在初始化变量value
和i_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