Mos*_*eda 3 c++ compiler-errors
SingleList.h
#include "ListBase.h"
#include "DataNode.h"
#include "SingleListIterator.h"
namespace list
{
class SingleListIterator;
class SingleList : public ListBase
{
private:
DataNode *head;
DataNode *tail;
public:
SingleList();
SingleList(const SingleList &obj);
~SingleList();
void Flush(); //deletes all elements in the list
void PushInFront(const int data); // **
void Append(const int data); // **
void DeleteLast();
void DeleteFirst();
int Delete(const int& data); // ** remove the first occurrence of data and return 1 otherwise 0
const int& GetFirst() const; // **
int& GetFirst(); // **
const int& GetLast() const; // **
int& GetLast(); // **
void PrintList() const;
const int IsEmpty() const;
// SingleList<T> &operator=(const SingleList<T>& obj) (**)
// const int operator==(const SingleList<T> &obj) const (**)
// const int operator!=(const SingleList<T> &obj) const (**)
// SingleList<T>& operator+(const SingleList<T> &obj) (**) // concatenates two lists
// operator int() // returns list size (**)
friend class SingleListIterator; // ** ASK Changd it from Iterator
};
Run Code Online (Sandbox Code Playgroud)
SingleListIterator.h
#include "Iterator.h"
#include "SingleList.h"
namespace list
{
class SingleList;
class SingleListIterator: public Iterator
{
public:
// error here --> Forward declaration of 'const struct list::SingleList'
SingleListIterator(const SingleList &list); // **
SingleListIterator(const SingleListIterator &obj); // **
virtual const int Current() const; // **
virtual void Succ();
virtual const int Terminate() const;
virtual void rewind();
// T &operator++(int) (**)
// SingleListIterator<T>& operator=(const SingleListIterator<T>&obj) (**)
};
// error here --> Invalid use of incomplete type 'list::SingleList'
SingleListIterator::SingleListIterator(const SingleList &list) : Iterator(list.head)
{
}
Run Code Online (Sandbox Code Playgroud)
代码中指示的错误另外在这样的情况下我可以做什么,两个头文件之间存在相互耦合????? Thaaaaanks
您使用前向声明,但无论如何,您还是.h递归地包含这些文件.前向声明的要点是您不需要包含前向声明的类的标头,从而打破了相互依赖性.
此外,它应该足以为其中一个类使用前向声明,而不是两个类.
我会建议以下结构:
SingleListIterator.h:
class SingleList; // forward declaration
class SingleListIterator {
// Declarations, only using pointers/references to SingleList.
// Definitions that need to know the structure of SingleList (like maybe
// a constructor implementation) need to be done in the .cpp file.
};
Run Code Online (Sandbox Code Playgroud)
SingleList.h:
#include "SingleListIterator.h" // include full declaration
class SingleList {
// declarations
};
Run Code Online (Sandbox Code Playgroud)
SingleListIterator.cpp:
#include "SingleListIterator.h"
#include "SingleList.h" // include full declaration of the type
// forward-declared in SingleListIterator.h
// method definitions,...
Run Code Online (Sandbox Code Playgroud)
SingleList.h:
#include "SingleList.h" // include full declarations of everything
// definitions
Run Code Online (Sandbox Code Playgroud)
这样,没有相互包含的文件,并且所有类型在实现(.cpp)文件中都是完全已知的.