0
我对抽象类有点问题。我有一堆分类。在StackAsLinkedList.h类我有对象的指针链表这里抽象类 - 语法帮助
LinkedList<Object*> list;
看到的语法是错误的,我不知道该怎么办。如果我将它命名为int或char,我会得到相同的语法错误..我对ADT /类层次结构相当陌生 由于StackAsLinkedLis.cpp文件需要识别该列表,因此我收到了很多错误。
这里只有两个文件。我有接近14个.h文件,所以我不想发布所有的代码。
#pragma once
#include "stack.h"
#include "List_Element.h"
#include "StackAsLinkedList.h"
#ifndef STACKASLINKEDLIST_H
#define STACKASLINKEDLIST_H
class StackAsLinkedList : public Stack
{
LinkedList<Object*> list;
void StackAsLinkedList::Purge();
void StackAsLinkedList::Accept (Visitor& visitor) const;
void StackAsLinkedList::Push (Object& object);
virtual Object& StackAsLinkedList::Pop();
virtual Object& StackAsLinkedList::Top() const;
virtual StackAsLinkedList::~StackAsLinkedList();
class Iter;
public:
StackAsLinkedList();
// ...
friend class Iter;
};
class StackAsLinkedList::Iter : public Iterator
{
StackAsLinkedList const& stack;
virtual ListElement<Object*> const* position;
bool StackAsLinkedList::Iter::IsDone() const;
virtual Object& StackAsLinkedList::Iter::operator *() const;
virtual void StackAsLinkedList::Iter::operator ++();
void StackAsLinkedList::Iter::Reset();
public:
Iter (StackAsLinkedList const&);
// ...
};
#endif
,这里是另一个头文件,我认为你可能需要查看
#ifndef Linked_List_H
#define Linked_List_H
#include "List_Element.h"
template <class T>
class LinkedList
{
ListElement<T>* head; // Protected member varable //
ListElement<T>* tail; // Protected member varable //
public:
LinkedList();
~LinkedList();
LinkedList (LinkedList const&);
LinkedList& operator = (LinkedList const&);
ListElement<T> const* Head() const;
ListElement<T> const* Tail() const;
bool IsEmpty() const; // Function to determine if list is empty //
T const& First() const;
T const& Last() const;
void Prepend (T const&); // Function to insert a node in front of the first node of the list //
void Append (T const&); // Function to insert a node in end of the last node of the list //
void Extract (T const&); // Function to extract a node //
void Purge(); // Function to purge all the data from list before deletion //
void InsertAfter (ListElement<T> const*, T const&); // Function to insert node after a specific node in the list //
void InsertBefore (ListElement<T> const*, T const&); // Function to insert node before a specific node in the list //
};
#endif
这里是stack.h incse你需要看到它和它失去了一些东西..
#ifndef STACK_H
#define STACK_H
#include "Container.h"
class Stack : public virtual Container
{
public:
virtual Object& Top() const = 0;
virtual void Push (Object&) = 0;
virtual Object& Pop() = 0;
};
#endif
这里是不识别列表的stackaslinklist.cpp文件
#include "StackAsLinkedList.h"
#include "NullObject.h"
#include "List_Element.h"
#include "Stack.h"
#include "Linked_List.h"
#include "Container.h"
//void StackAsLinkedList::Accept (Visitor& visitor) const
//{
// ListElement<Object*> const* ptr;
//for (ptr = list.Head();
//ptr != 0 && !visitor.IsDone(); ptr = ptr->Next())
// {
//visitor.Visit (*ptr->Datum());
// }
//}
StackAsLinkedList::StackAsLinkedList() : list()
{
}
void StackAsLinkedList::Purge()
{
if (IsOwner())
{
ListElement<Object*> const* ptr;
for (ptr = list.Head(); ptr != 0; ptr = ptr->Next())
delete ptr->Datum();
}
list.Purge();
count = 0;
}
StackAsLinkedList::~StackAsLinkedList()
{
Purge();
}
void StackAsLinkedList::Push (Object& object)
{
list.Prepend (&object);
++count;
}
Object& StackAsLinkedList::Pop()
{
if (count == 0)
throw domain_error ("stack is empty");
Object& const result = *list.First();
list.Extract (&result);
--count;
return result;
}
Object& StackAsLinkedList::Top() const
{
if (count == 0)
throw domain_error ("stack is empty");
return *list.First();
}
StackAsLinkedList::Iter::Iter (
StackAsLinkedList const& _stack) :
stack (_stack)
{ Reset(); }
bool StackAsLinkedList::Iter::IsDone() const
{ return position == 0; }
Object& StackAsLinkedList::Iter::operator *() const
{
if (position != 0)
return *position->Datum();
else
return NullObject::Instance();
}
void StackAsLinkedList::Iter::operator ++()
{
if (position != 0)
position = position->Next();
}
void StackAsLinkedList::Iter::Reset()
{ position = stack.list.Head(); }
的inizializer列表不会承认名单
StackAsLinkedList::StackAsLinkedList() : list()
一些错误即时得到如下:注:第一个错误带我到我原来的问题:
LinkedList<Object*> list;
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
error C2433: 'StackAsLinkedList::Iter::position' : 'virtual' not permitted on data declarations
error C2614: 'StackAsLinkedList' : illegal member initialization: 'list' is not a base or member
error C2065: 'list' : undeclared identifier
error C2228: left of '.Head' must have class/struct/union
error C2065: 'list' : undeclared identifier
error C2228: left of '.Purge' must have class/struct/union