gpt4 book ai didi

c++ - 为我的模板化双向链表创建迭代器时出现问题

转载 作者:行者123 更新时间:2023-11-30 03:02:13 25 4
gpt4 key购买 nike

为了好玩,我正在创建自己的双向链表实现,我已经完成了列表本身的编写,但现在我正试图向它添加一个迭代器,但我对此的语法规则感到困惑东西。这是我得到的错误:

error C2990: 'd_list' : non-class template has already been declared as a class template

这是它所在的头文件:

/****************************/
/* d_list class */
/* with exceptions classes */
/****************************/
class d_list_error{};
class d_list_empty{};

template <class T>
class d_list_iter;

template <class T>
class d_list{
public:
d_list();
d_list(const d_list &_dl);
d_list &operator=(const d_list &_dl);
~d_list();

void push_back(T item);
void push_front(T item);

void pop_back();
void pop_front();

bool isEmpty() const;
unsigned int size() const;

void clear();
private:
struct node{
node *prev;
node *next;
T data;
};
node *head;
node *tail;
unsigned int currSize;
d_list_iter<T> *dli;

/* Utility Functions */
void initFirstEle(T item, node* first);
void copyAll(const d_list<T> &_dl);
};

/*************************/
/* d_list iterator class */
/*************************/

class d_iter_already_exists {};

template <class T>
class d_list_iter{
public:
d_list_iter(const d_list &_dl);
~d_list_iter();
T getNext() const;

private:
friend class d_list;
d_list<T> *dl;
node *next;
node *prev;
bool valid;
};

下面是为d_list 定义的所有成员函数。我还没有开始为迭代器编写它们。根据我的所有测试,d_list 运行良好。我想我只是遇到了语法错误,因为这对我来说是一个未知领域。

最佳答案

您必须通过在类声明之外指定模板参数来指定模板化类型。

具体来说,您应该写(类似于)d_list<T>而不是简单的 d_listtemplate <typename> class d_list_iter 内的声明。这包括您对 friend 的使用.

同样适用于节点。假设它们是公开展示的:

typename d_list<T>::node而不是简单的 nodetemplate <typename> class d_list_iter 内的声明。

关于c++ - 为我的模板化双向链表创建迭代器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291507/

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