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


Автор: Graf Zeppelin 23.5.2007, 08:44
Впервые реши применить шаблоны, и столкнулся со странной проблемой.
Есть три файла
test.cpp
Код
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

#include "tmp.h"

using namespace std;

int main(int argc, char *argv[]) {
    class tmp<char> lol;
  cout << "Hello, world!" << endl;

  return EXIT_SUCCESS;
}

tmp.h
Код
#ifndef TMP_H
#define TMP_H

/**
    @author Darth Vader,,, <darth@STATION>
*/
template<class T> class tmp{
public:
    tmp();
    ~tmp();
};

#endif

tmp.cpp
Код
#include "tmp.h"

template<class T> tmp<T>::tmp() {
}
template<class T> tmp<T>::~tmp() {
}


При сборке выдаёт ошибки
test.o: In function `main':/home/darth/Projects/test/src/test.cpp:13: undefined reference to 'tmp<char>::tmp()'
:/home/darth/Projects/test/src/test.cpp:16: undefined reference to `tmp<char>::~tmp()'
:/home/darth/Projects/test/src/test.cpp:16: undefined reference to `tmp<char>::~tmp()'


Автор: Anikmar 23.5.2007, 08:48
Перенесите все из tmp.cpp в tmp.h
Шаблоны воспринимаются только когда реализация их подключена #include

Можно попробовать включить #include <tmp.cpp>, я так не пробовал - может и сработает

Автор: 88andrey 23.5.2007, 08:48
описание класса с шаблономи должно находится в томже файлв где и класс

Автор: Daevaorn 23.5.2007, 08:48
Цитата(Graf Zeppelin @  23.5.2007,  09:44 Найти цитируемый пост)
tmp.cpp

код шаблона должен быть в *.h/*.hpp файле

Автор: Graf Zeppelin 23.5.2007, 08:52
Спасибо, это решило проблему.

Автор: MAKCim 23.5.2007, 09:01
надоели эти темы, честное слово  smile 

Автор: korbian 23.5.2007, 10:20
Ищи информацию о модели включения и модели разделения при применении шаблонов.
есть хорошая книга:
Цитата

"ШАБЛОНЫ С++. Справочник разработчика" Девид Вандервурд, Николай Джосаттис.

Увы, электронный вариант я не встречал. 
ЗЫ: если где надешь электронный вариант, отпиши.

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