Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 抽象类-语法帮助_C++_Data Structures_Syntax_Abstract Class - Fatal编程技术网

C++ 抽象类-语法帮助

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.

我在抽象类方面有点问题。我有很多课。在StackAsLinkedList.h类中,我有一个指向对象的指针链接列表,如图所示

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