为什么我得到的声明没有类型错误链接列表

Why am I getting declaration with no type error - linked list?

本文关键字:类型 错误 链接 列表 声明 为什么      更新时间:2023-10-16

嗨,我正在尝试使用模板和ADT实现一个链表。现在我有两节课。一个是链表的迭代器,另一个是我将用来派生链表类的链表基类。

当试图实现两个函数时,我会在列表的开头和结尾分别给我一个迭代器,我会收到编译错误,说"ISO C++禁止声明没有类型的‘linkedListIterator’"

以下是迭代器定义的代码:

#ifndef LINKEDLISTITERATOR_H
#define LINKEDLISTITERATOR_H
#include <stddef.h> //for NULL
#include "nodetype.h"
#include "linkedlisttype.h"

template <class Type>
class linkedListIterator
{
public:
    linkedListIterator();
    linkedListIterator(nodeType<Type> *ptr);
    Type operator*();
    linkedListIterator<Type> operator++();
    bool operator==(const linkedListIterator<Type>& right) const;
    bool operator!=(const linkedListIterator<Type>& right) const;
private:
    nodeType<Type> *current; 
};
#endif // LINKEDLISTITERATOR_H

以下是定义节点类型的代码

#ifndef NODETYPE_H_INCLUDED
#define NODETYPE_H_INCLUDED
//Definition of the node
template <class Type>
struct nodeType
{
    Type info;
    nodeType<Type> *link;
};
#endif // NODETYPE_H_INCLUDED

以下是链接列表基类的定义:

#ifndef LINKEDLISTTYPE_H
#define LINKEDLISTTYPE_H
#include "nodetype.h"
#include "linkedlistiterator.h"
//Definition of linked list
template <class Type>
class linkedListType
{
public:
    const linkedListType<Type>& operator=
    (const linkedListType<Type>&);
    void initializeList();
    bool isEmptyList() const;
    void print() const;
    int length() const;
    void destroyList();
    Type front() const;
    Type back() const;
    virtual bool search(const Type& searchItem) const = 0;
    virtual void insertFirst(const Type& newItem) = 0;
    virtual void insertLast(const Type& newItem) = 0;
    virtual void deleteNode(const Type& deleteItem) = 0;
    // this is where the error comes    
    linkedListIterator<Type> begin();
    // and here as well
    linkedListIterator<Type> end();
    linkedListType();
    linkedListType(const linkedListType<Type>& otherList);
    ~linkedListType();
protected:
    int count; 
    nodeType<Type> *first; 
    nodeType<Type> *last; 
private:
    void copyList(const linkedListType<Type>& otherList);
};
#endif // LINKEDLISTTYPE_H

我是模板和ADT的新手,所以试着把我的思想围绕在这一点上。如有任何帮助,我们将不胜感激。

您有两个标头,每个标头都试图包含彼此。结果是,如果使用#include "linkedlistiterator.h",则linkedListType的定义出现在linkedListIterator的定义之前;因此在该点上没有声明由于CCD_ 4引起的错误。

在这种情况下,迭代器类型似乎根本不依赖于列表类型,因此您可以简单地从"linkedlistiterator.h"中删除#include "linkedlistlype.h"

似乎linkedlisttype.hlinkedlistiterator.h都包含彼此。

这表明在你的脑海中有着相当紧密的结合。您可能想要LinkedList<T>类和嵌套的LinkedList<T>::Iterator类。