The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Проблема с шаблоном класса., !*! David, 17-Мрт-02, 23:15  [смотреть все]
Скажите, что я делаю не так? Маленькая прога:
        1. Файл xxx.h
#ifndef XXX_H
#define XXX_H
template <class TYPE>
class xxx {
public:
  xxx();
  ~xxx();
  TYPE x[10];
  int y;
};
#endif

        2. Файл xxx.cpp
#include "xxx.h"
template <class TYPE> xxx<TYPE>::xxx()
{ ... }
template <class TYPE> xxx<TYPE>::~xxx()
{ ... }

        3. Файл main.cpp
#include "xxx.h"
typedef xxx<int> xxxint;
int main(int argc, char *argv[])
{
  xxxint l;
  return EXIT_SUCCESS;
}

На это дело компилятор выдаёт:
  main.o: In function `main':
  undefined reference to `xxx<int>::xxx(void)'
  undefined reference to `xxx<int>::~xxx(void)'
  undefined reference to `xxx<int>::~xxx(void)'
Я чего-то не въеду. При использовании шаблонов надо какую-то опцию дополнительную компилятору прописывать? Помогите, пожалуйста. Я в растерянности. Не знаю даже с чего начинать, чтобы найти ошибку. У меня FreeBSD 4.4. Работаю в Kdevelop (хотя это вряд ли имеет значение).
Заранее спасибо!

  • RE: Проблема с шаблоном класса., !*! romanSA, 11:31 , 18-Мрт-02 (1)
    Есть два решения этой проблемы:
    1) нужно описывать шаблон в заголовочном файле _ПОЛНОСТЬЮ_
    2) если компиллятор поддерживает директиву С++ export, то методы шаблона нужно определять как:

    #include "xxx.h"
    export template <class TYPE> xxx<TYPE>::xxx()
    { ... }

    export template <class TYPE> xxx<TYPE>::~xxx()
    { ... }

    P.S. В .h-файле директива export не используется.
    Если компиллятор не поддерживает директиву export, то остаётся только вариант 1)


    • Огромное спасибо., !*! David, 11:48 , 18-Мрт-02 (2)
      Спасибо. Действительно всё заработало. Вот только я не пойму: это что, глобальный глюк что ли? Такого же по идее быть не должно. Ни в одной книжке по С++ я такого не встречал.
      • RE: Огромное спасибо., !*! romanSA, 11:58 , 18-Мрт-02 (3)
        >Ни в одной книжке
        >по С++ я такого не
        >встречал.

        См.

        The C++ Programming Language
        Bjarne Stroustrup

        или переводное издание за прошлый год (хоть в мягкой хоть в жёсткой обложке).
        Глава "Шаблоны", пункт "Организация исходного кода"





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру