0

我有一个链表类 List。我必须为它创建一个复制构造函数。我实际上遇到了语法问题。这是我的代码:

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

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

Node* temp = otherList->getHead();

node 是组成 List 的指针。这是一个单独的类节点。但执行上述操作会出现错误:

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

所以我尝试使用“。” 而不是上面表达式中的“->”。收到以下错误:

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

请指导我

4

2 回答 2

2

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

现在的问题是你有一个const引用,但你正在调用一个非const成员函数。就编译器而言,您的getHead函数可能会修改List,因此不应在const List. 您需要声明getHead为 being const。无论您在哪里声明 ,都在开始函数之前getHead粘贴 a :const{

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

这假设它getHead实际上并没有修改列表(它不应该)。如果是这样,那么您不能将其const设为成员函数,也不能从复制构造函数中调用它,因为otherListis const。但是,您的复制构造函数不应该修改它正在复制的对象,所以您otherList 应该const.

于 2013-02-07T19:00:21.610 回答
0

我觉得getHead()应该声明一个 const 函数……试试看,让我们知道它是否有效。

于 2013-02-07T19:00:38.947 回答