2013-04-09 217 views
2

这两个函数的主要区别是什么?为什么第二个函数不能在这种情况下工作?调用构造函数并初始化

template <class T> MyStack<T>::Node::Node(T& input, Node* head):next(head),value(input) {} 

template <class T> MyStack<T>::Node::Node(T& input, Node* head) {next = head; value = input;} 

我对第二个为什么不起作用的猜测是因为它在初始化时没有指定变量。

回答

1

MyStack<T>::value看起来像是T&。如果是这样的话,那么请记住,引用必须被初始化,并且它们不能被反弹到不同的对象。使用初始化程序列表是正确初始化作为对象数据成员的引用的唯一方法;你不能用构造函数中的赋值来初始化它们。 (实际上,如果你省略了初始化列表条目,你应该会得到类似于“未初始化的引用成员”的错误。)

+0

太棒了。谢谢你的回答,以及其他人。 – user2180833 2013-04-09 15:59:35

0

nextvalue可能没有空的默认构造函数。

除此之外,const和引用成员必须在初始化列表中初始化,您不能指定给它们。