我有一个链表类List。我必须为它制作一个复制构造函数。我实际上有语法问题。这是我的代码:
template <class T>
List<T>::List(const List<T>& otherList)
{
}
otherList 是 List 类型的另一个项目。事实上我认为它是一个指向列表的指针。我为类 List 定义了一个 getHead() 函数,它工作正常。 我认为执行以下操作就可以了:
Node* temp = otherList->getHead();
节点是组成列表的指针。这是一个单独的类节点。 但执行上述操作会出现错误:
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;
}
请指导我
最佳答案
首先,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
成员函数并且不能从你的复制构造函数中调用它,因为 otherList
是const
.但是,你的复制构造函数不应该修改它正在复制的对象,所以你的 otherList
应该是const
.
关于c++ - 链表类的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758764/