C++ 调用构造函数并初始化

C++ 调用构造函数并初始化,c++,class,templates,constructor,initialization,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;

这两种方法的主要区别是什么?为什么第二种方法在这样的情况下不起作用

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;}
template MyStack::Node::Node(T&input,Node*head):下一个(head),值(input){}
模板MyStack::Node::Node(T&input,Node*head){next=head;value=input;}

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

next
value
可能没有空的默认构造函数


除此之外,常量和引用成员必须在初始化列表中初始化,您不能分配给它们。

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

Great。谢谢你们的回答,也谢谢你们其他人。