2013-04-09 268 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和引用成員必須在初始化列表中初始化,您不能指定給它們。