C++ STL: Какую закорючку поставить чтобы заработало?

0000

Вообщем пусть имеется класс с одним строковым приватным членом - именем объекта. Хоцца написать метод для класса, который выводит имена всех объектов класса (ссылки на них хранятся в переменной типа list).
Вот код который я настрочил после недолгого зарюхивания STL. Но что то нифига он не выводит - такое чувство что в листе у меня не ссылки на объекты хранятся, а нечто другое. Метод, который должен выводить все имена, CMyClass::Tst.
P.S. Не пинайте сильно, я C++ тока начал учить

#include <iostream>
#include <list>
#include <string>
using namespace std;

class CMyClass
{
private:
static list<CMyClass> Objs;
string m_name;
public:
CMyClass(char* name);
void Tst;
};

CMyClass::CMyClass (char* name)
{
Objs.push_back (*this);
m_name = name;
}

void CMyClass::Tst
{
list<CMyClass>::iterator i;
for (i = Objs.begin ; i != Objs.end ; ++i)
cout << "->" << (i).m_name << endl;
}

list<CMyClass> CMyClass::Objs;

int main
{
CMyClass *obj1 = new CMyClass ("obj1_name");
CMyClass *obj2 = new CMyClass ("obj2_name");
obj1->Tst;
getchar ;
}

И еще пара простеньких вопросов
1. Где нужно определять list<CMyClass> CMyClass::Objs (в заголовочном файле класса, в реализации класса, отдельно) или можно как то убрать эту строку из кода?
2. Можно ли как-нить вызвать метод класса не создавая объект?

kokoc88

ИМХО, тебе надо сначала выучить язык Си. Ты хранишь в списке целые классы, а поэтому push_back создаёт копии объектов. Ещё надо удалять из списка объекты, которые ты добавил в конструкторах. Функцию, которая использует только статические переменные, надо делать статической.
Статические переменные надо определять в файле реализации.
Можно вызвать статический метод класса, не создавая экземпляр.

0000

Да знаю я что надо выучить - тока програмизм у меня как хоббит, потому времени на него много нет.
> Ты хранишь в списке целые классы
А как хранить указатели?
и
> Можно вызвать статический метод класса, не создавая экземпляр.
Можно кусочек кода?

kokoc88

Ну если нет времени на программирование, тогда зачем учишь?
Как хранить указатели? list<CMyClass*>
 
class C
{
public:
static void EnumObjects
{
}
};
...
C::EnumObjects;

0000

> тогда зачем учишь?
Дык просто интресно и всяко полезнее, чем например гамить.
Пасиб, за ответы
Вопрос решен

Werdna

Начни с того, что напиши вот так:
 
static list<CMyClass*> Objs;

дальше сам справишься?

0000

Написал же что все уже давно решилось
Оставить комментарий
Имя или ник:
Комментарий: