c++ - 链表类的复制构造函数

标签 c++ linked-list

我有一个链表类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成员函数并且不能从你的复制构造函数中调用它,因为 otherListconst .但是,你的复制构造函数不应该修改它正在复制的对象,所以你的 otherList 应该const .

关于c++ - 链表类的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758764/

相关文章:

c - 显示链接列表时出现运行时错误的原因可能是什么

c++ - 堆栈 std::vector 作用域

c - 在单个遍历链表中交换从开始到结束的第 k 个位置

c++ - 动态内存可以与全局变量相媲美吗?

c++ - 在 C++ 中使用堆栈(链表)将中缀转换为后缀

java - 迭代器接口(interface)

保存类模板的任何特化的 C++ 变量

c++ - 全局对象与单例模式

c++ - makefile中汇编文件的生成

c++ - 为什么在 C++ 中使用指针?