Страница 1 из 1
Static-указатель в абстрактном классе
Добавлено: 22 сен 2008, 19:28
Monopo
Код: Выделить всё
class Transport
{
public:
Transport()
{}
~Transport()
{}
static void Print();
virtual void Show()=0;
void Add(void);
private:
static Transport *pLast; //Указатель на последний элемент в списке объектов
Transport* pNext;//на следующий после элемента
static Transport *pHead; //соответственно, на первый
protected:
char pName[100];
static int Count;
};
class Auto :p ublic Transport //Transport---Auto
{
//...
};
class Train :p ublic Transport // Transport---Train
{
//...
};
class Express :p ublic Train
{
//...
};
//остальная всячина
Выдает ошибки:
Код: Выделить всё
[Linker Error] Unresolved external 'Transport: :p Head' referenced from /*...*/
[Linker Error] Unresolved external 'Transport: :p Last' referenced from /*...*/
Как решить эту проблему? Как определить статические указатели? Пробовал присваивать так называемый NULL или 0, все одно и то же!
Re: Static-указатель в абстрактном классе
Добавлено: 23 сен 2008, 01:16
Alezis
Твой код у меня скомпилялся без проблем на VC6.0. Если не определить указатель, то тоже появляются такие же ошибки, т.е. 'Unresolved external'
Re: Static-указатель в абстрактном классе
Добавлено: 14 дек 2008, 17:27
Monopo
Код: Выделить всё
class Trial
{
public:
virtual void Print()=0;
};
Наследниками этого класса являются класс Test и класс Exam (у него еще есть потомок FinalExam). В Test и FinalExam метод Print() переопределяется по-своему.
И бадья обо всех Trial'ских объектах (Test и FinalExam) должна храниться в списке, как я понимаю, таком:
list<Trial*> TrialList;
list<Trial*>::iterator Tx = TrialList.begin();
Так вот у меня проблема такая. Не знаю, как в цикле "пока Tx != TrialList.end()" вызывать функцию Print для объекта Tx??
Re: Static-указатель в абстрактном классе
Добавлено: 14 дек 2008, 20:20
Romeo
Код: Выделить всё
list<Trial*> TrialList;
list<Trial*>::iterator Tx = TrialList.begin();
for (; Tx != Trial.end(); ++Tx)
{
Trial* pT = *Tx;
pT->Print();
}