复制链表类的构造函数

时间:2013-02-07 18:54:26

标签: c++ linked-list

我有一个链表类列表。我必须为它制作一个复制构造函数。我实际上有语法问题。这是我的代码:

template <class T>
List<T>::List(const List<T>& otherList)
{
}

otherList是List类型的另一个项目。事实上,我认为它是一个指向List的指针。我有一个为类List定义的getHead()函数,它的工作正常。 我认为做以下事情就可以了:

Node* temp = otherList->getHead();

node是组成List的指针。这是一个单独的类Node。 但做上述操作会产生错误:

base operand of -> has non-pointer type const List<int> 

所以我尝试使用“。”而不是“ - &gt;”在上面的表达中。得到以下错误:

passing const List<int> as this argument of ListItem<T>* List<T>::getHead() [with T = int] discards qualifiers [-fpermissive]

我的getHead函数:

template <class T>
node<T>* List<T>::getHead()
{
return head;
}

请指导我

2 个答案:

答案 0 :(得分:2)

首先,otherList不是指针,而是“const List<T>的引用”。我们知道它是一个参考,因为它的类型为&。如果它是一个指针,它的类型将有一个*。引用的行为就像您只拥有对象本身一样。因此,使用.访问其成员函数getHead是正确的。

现在问题是您有const引用,但是您正在调用非const成员函数。就编译器而言,getHead函数可能会修改List,因此不应在const List上调用。您需要将getHead声明为const。只要您声明getHead,请在开始执行此功能的const之前加上{

template <typename T>
const Node<T>* List<T>::getHead() const {
  // ...
}

这假定getHead实际上没有修改列表(它不应该修改)。如果是,则您无法将其设为const成员函数,并且无法从复制构造函数中调用它,因为otherListconst。但是,您的复制构造函数永远不应该修改它正在复制的对象,因此otherList 应该const

答案 1 :(得分:0)

我觉得应该将getHead()声明为const函数...尝试并让我们知道它是否有效。