Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблоны, Что не так? 
V
    Опции темы
FelikZ
Дата 24.5.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Возникла проблема с функциями в шаблонном классе. Если описывать функции в хеадер файлах то все компилится и
линкуется на ура, но если же перенести реализацию функций в отдельный файл(*.CPP), то все тоже компилится но
не линкуется - пишет что реализация данной функции ненайдена или:
Цитата

Error    2    error LNK2019: unresolved external symbol "public: bool __thiscall Resources::IResourceMgr<struct IDirect3DTexture9>::IsInit(void)" (?IsInit@?$IResourceMgr@UIDirect3DTexture9@@@Resources@@QAE_NXZ) referenced in function "public: virtual long __thiscall Resources::TextureMgr::Initialize(struct IDirect3DDevice9 *)" (?Initialize@TextureMgr@Resources@@UAEJPAUIDirect3DDevice9@@@Z)    RTextureMgr.obj
 

Вот так работает:
IResourceMgr.h
Код

#pragma once

namespace Resources
{
    template<typename TypeOf>
    class IResourceMgr
    {
    protected:
        vector<Resource<TypeOf>> _resources;
        bool _isInit;
    public:
        IResourceMgr<TypeOf>::IResourceMgr()
        {
            _isInit = false;
        }

        IResourceMgr<TypeOf>::~IResourceMgr()
        {
            _resources.clear();
        }

                  //....

        /* State of class */
        bool IsInit();
    };
    template<typename TypeOf>
    bool IResourceMgr<TypeOf>::IsInit()
    {
        return _isInit;
    }
}


Почему не работает так?:
IResourceMgr.h - только обьявление функции IsInit()
Код

#pragma once

namespace Resources
{
    template<typename TypeOf>
    class IResourceMgr
    {
    protected:
        vector<Resource<TypeOf>> _resources;
        bool _isInit;
    public:
        IResourceMgr<TypeOf>::IResourceMgr()
        {
            _isInit = false;
        }

        IResourceMgr<TypeOf>::~IResourceMgr()
        {
            _resources.clear();
        }

                  //....
                  //
                  // НЕТУ РЕАЛИЗАЦИИ см. "IResourceMgr.cpp"
                  //
        /* State of class */
        bool IsInit();
    };
}



IResourceMgr.cpp - реализация ф-и IsInit
Код

#include "StdAfx.h"
#include "RIResourceMgr.h"

namespace Resources
{
    template<typename TypeOf>
    bool IResourceMgr<TypeOf>::IsInit()
    {
        return _isInit;
    }
}



--------------------
user posted image
PM WWW ICQ Skype   Вверх
Hurricane
Дата 24.5.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.4.2007

Репутация: 6
Всего: 9



Патамучта темплейты не помещают в cpp. За исключением случаев, когда они используются только в этом cpp локально, но это плохая практика.
PM MAIL   Вверх
FelikZ
Дата 24.5.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



спасибо
но тогда интересно почему это дело компилится? пусть и не линкуется...

Это сообщение отредактировал(а) FelikZ - 24.5.2007, 22:48


--------------------
user posted image
PM WWW ICQ Skype   Вверх
Daevaorn
Дата 24.5.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(FelikZ @  24.5.2007,  23:47 Найти цитируемый пост)
но тогда интересно почему это дело компилится? пусть и не линкуется...

потому что, для компиляции реализация метода не нужна.
PM MAIL WWW   Вверх
FelikZ
Дата 24.5.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Daevaorn, Hurricane +1


--------------------
user posted image
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.