C++ 抽象类-语法帮助
我在抽象类方面有点问题。我有很多课。在StackAsLinkedList.h类中,我有一个指向对象的指针链接列表,如图所示C++ 抽象类-语法帮助,c++,data-structures,syntax,abstract-class,C++,Data Structures,Syntax,Abstract Class,我在抽象类方面有点问题。我有很多课。在StackAsLinkedList.h类中,我有一个指向对象的指针链接列表,如图所示 LinkedList<Object*> list; 下面是stackaslinklist.cpp文件,它无法识别列表 #include "StackAsLinkedList.h" #include "NullObject.h" #include "List_Element.h" #include "Stack.h" #include "Linked_List.
LinkedList<Object*> list;
下面是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 (); }
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
LinkedList列表;
错误C2143:语法错误:缺少“;”在“之前,听起来LinkedList类对StackAsLinkedList类不可见。在“StackAsLinkedList.h”的顶部包括“LinkedList.h”
#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 (); }
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