调用构造函数并初始化

时间:2013-04-09 15:21:46

标签: c++ class templates constructor initialization

这两个主要的不同之处是什么?为什么第二个不能在这样的情况下起作用?

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;}

我猜测第二个不起作用的原因是因为它在初始化时没有任何分配变量。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

除此之外,const和reference成员必须在初始化列表中初始化,不能分配给它们。