gpt4 book ai didi

c++ - 请声明链表?

转载 作者:行者123 更新时间:2023-11-28 05:54:47 25 4
gpt4 key购买 nike

我第一次尝试实现 LinkedList。我几乎完成了头文件的声明,但我遇到了一个不会消失的小错误。在 Node 类下面声明类 LinkedList 和 Iterator 的地方,我不断收到消息“将 LinkedList 重新定义为一种不同类型的符号”和“将 Iterator 重新定义为一种不同类型的符号”。我尝试像下面这样在代码的最顶部声明​​类,将友元函数移至私有(private)声明,但似乎没有任何效果。有人能指出我做错了什么吗?除了下面的内容,我没有做太多其他事情。

class LinkedList;
class Iterator;


template <typename T>
class Node{
public:
Node(T Data);


private:
T data;
Node* next;
Node* previous;
friend class LinkedList;
friend class Iterator;
};

template<typename T>
class LinkedList {
public:
LinkedList();
void pushback(T data);
//void insert(Iterator pos, T data);
~LinkedList();
//Iterator begin();
//Iterator end();

private:
Node* first;
Node* last;
friend class Iterator;
};

template <typename T>
class Iterator{
public:

private:
Node* position;
LinkedList* container;
friend class LinkedList;
};

#endif /* defined(__Linked_List_1__LinkedList__) */

最佳答案

首先将 LinkedList 声明为类,然后将 LinkedList 定义为类模板。您应该立即将名称声明为类模板(其他声明同样适用):

template <typename> class LinkedList;

当引用相应的类模板时,例如,在 Nodefriend 声明中,您需要将类模板设为友元,例如,使用

template <class S> friend class LinkedList;

... 或者,可能,最好将相应的实例化为 friend :

friend class LinkedList<T>;

关于c++ - 请声明链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com