Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Поле типа list в классе


Автор: Bogdan1024 10.8.2006, 00:46
Пытаюсь написать класс, который имел бы поле типа list<объект другого класса>, но почему-то вываливается куча ошибок. Кто-нибудь знает почему?
Класс:
Код

#pragma once
#pragma warning (disable:4786)

#include <list>
#include "gmspr.h"

class Cgmsprcoll
{
public:
    Cgmsprcoll(void);
    ~Cgmsprcoll(void);

private:
    list<Cgmspr> List;
    list<Cgmspr>::iterator Iterator;
};


Автор: Любитель 10.8.2006, 01:05
Поставь std::list.
А вообще - говориЮ, что за ошибки.

Автор: Bogdan1024 10.8.2006, 01:13
спасибо

Автор: Bogdan1024 10.8.2006, 02:36
Забыл одну очень важную деталь: поля типа list и list::iterator статические.
Код

#pragma once
#pragma warning (disable:4786)

#include <list>
#include "gmspr.h"

class Cgmsprcoll
{
public:
    Cgmsprcoll(void);
    ~Cgmsprcoll(void);
   static void Free(void);
private:
    static list<Cgmspr> List;
    static list<Cgmspr>::iterator Iterator;
};

В связи с этим появилась новая проблема:
Так как все статические члены надо инициализировать пытаюсь инициализировать это поле в реализации класса. 
Код

std::list<anotherclass> li();
std::list<Cgmspr>::iterator i();

Но линкер всё равно кидает мне анрезолвед экстернал ошибку когда я пытаюсь использовать это поле в статической функции
Код

void Cgmspr::Free(void)
{
    for (i = List.begin(); i != List.end(); ++i)
        (*i).Free();
}

Как его правильно инициализировать?

Автор: Earnest 10.8.2006, 05:48
Инициализация статического члена должно выглядеть так:
Код

std::list<Cgmspr> Cgmsprcoll::li;

А твой код объявляет свободную глобальную переменную.

Автор: Bogdan1024 10.8.2006, 07:17
Спасибо, Earnest!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)