//.hpp
template <class T>
class CList
{
friend class iterator;
public:
CList(CList<T> *pPrev);
~CList();
//.... - объявление всяких других методов CList
class iterator
{
friend class CList;
public:
//реализация внутри класса
iterator() { m_pPosition = NULL; }
~iterator() { ... }
T* operator*() { ... }
void operator++() { ... }
void operator--() { ... }
iterator& operator=(CList<T>*) { ... }
protected:
CList* m_pPosition;
};
protected:
//...
};
//.cpp
//реализация методов CList
template <class T> CList<T>:: CList() { и....
//...
CList<CModels> g_models;
CList<CModels>::iterator iModels;
Реализация класса итератора в .cpp
а реализацию всех его методов делаю в .cpp файле
и в нём же создаю список CList<CModel> g_Models. - это всё прекрасно
работало, пока не понадобилось добавить итератор...
Т.е. добавил в СList вложенный класс class iterator и вот у него то реализацию методов не получается заганошить в .cpp файл...
т. е. вот к примеру:
Если так (в этом случае всё работает нормально):
Код:
А вот если так:
Код:
//.hpp
template <class T>
class CList
{
friend class iterator;
public:
CList(CList<T> *pPrev);
~CList();
//.... - объявление всяких других методов CList
class iterator
{
friend class CList;
public:
iterator();
~iterator();
T* operator*();
void operator++();
void operator--();
iterator& operator=(CList<T>*);
protected:
CList* m_pPosition;
};
protected:
//...
};
//.cpp
//реализация методов CList
template <class T> CList<T>:: CList() { и....
//и реализация методов итератора тоже здесь:
template <class T> CList<T>:: iterator:: iterator() { и т. д. ....
//...
CList<CModels> g_models;
CList<CModels>::iterator iModels;
template <class T>
class CList
{
friend class iterator;
public:
CList(CList<T> *pPrev);
~CList();
//.... - объявление всяких других методов CList
class iterator
{
friend class CList;
public:
iterator();
~iterator();
T* operator*();
void operator++();
void operator--();
iterator& operator=(CList<T>*);
protected:
CList* m_pPosition;
};
protected:
//...
};
//.cpp
//реализация методов CList
template <class T> CList<T>:: CList() { и....
//и реализация методов итератора тоже здесь:
template <class T> CList<T>:: iterator:: iterator() { и т. д. ....
//...
CList<CModels> g_models;
CList<CModels>::iterator iModels;
В этом случае линковщик начинает орать, что не видит методов итератора...
В идеале методы можно реализовывать прямо внктри класса, как например в Java.
разместиол в .cpp - поскольку и объекты этого класса я создаю тольков этом .cpp, а вот методы вложеннного класса итератора тутда же разместить пачему-то не получается...
--------------------------------------------------------------
Дело в том, что потом всё в .lib компилируется и мне неохота, чтоб
реализация методов итератора осталась в .hpp файле на виду для каждого...
---------------------------------------------------------------
Может как-нибудь то возможно это сделать...
разместиол в .cpp - поскольку и объекты этого класса я создаю тольков этом .cpp, а вот методы вложеннного класса итератора тутда же разместить пачему-то не получается...
--------------------------------------------------------------
Дело в том, что потом всё в .lib компилируется и мне неохота, чтоб
реализация методов итератора осталась в .hpp файле на виду для каждого...
---------------------------------------------------------------
Может как-нибудь то возможно это сделать...[/QUOTE]Почему мало кто понимает как работают шаблоны? Сам шаблон ведь не компелируется, а компелируется инстанциированный шаблон каким либо типом. Т.е. для каждого типа генерируется разный код.
Начиная с 2003 студии и шаблоны в спп файлах компиляться, и объектники создаются. Хотя ума не приложу как - может по -умолчанию int'ом заменяют?
С чего ты это взял?
Сам компилил
Ну то, что ты "сам компилил" ещё ничего не значит. :D
Не вериш - попробуй.
Но.... не линкуется :)
То, что компилятор завершает свою работу без ошибок или получение валидного объектного файла? :D
Так вот совершенно пустой файл точно так же "компилируется" и на выходе получается точно такой же obj файл без какой-либо реализации.
Не вериш - попробуй.
То, что компилятор завершает свою работу без ошибок или получение валидного объектного файла? :D
Так вот совершенно пустой файл точно так же "компилируется" и на выходе получается точно такой же obj файл без какой-либо реализации.
Не вериш - попробуй.[/QUOTE]Вообще-то это была шутка...
А вот Alexandoros видимо не шутит... :)
Ай, с вами совершенно невозможно разговаривать. :D
А вложенные классы не только не линкуется - он даже еще и не
компилируются - собственно поэтому вопрос и задовал...
------------------------------------------------------------------
Вообщем как-то надоело мне париться и я всё запихнул в .hpp-файл -
тепреь нормально...
ты пример кода приведи