The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблема с шаблоном класса."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблема с шаблоном класса."
Сообщение от David emailИскать по авторуВ закладки on 17-Мрт-02, 23:15  (MSK)
Скажите, что я делаю не так? Маленькая прога:
        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 (хотя это вряд ли имеет значение).
Заранее спасибо!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Проблема с шаблоном класса."
Сообщение от romanSA Искать по авторуВ закладки on 18-Мрт-02, 11:31  (MSK)
Есть два решения этой проблемы:
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)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Огромное спасибо."
Сообщение от David emailИскать по авторуВ закладки on 18-Мрт-02, 11:48  (MSK)
Спасибо. Действительно всё заработало. Вот только я не пойму: это что, глобальный глюк что ли? Такого же по идее быть не должно. Ни в одной книжке по С++ я такого не встречал.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Огромное спасибо."
Сообщение от romanSA Искать по авторуВ закладки on 18-Мрт-02, 11:58  (MSK)
>Ни в одной книжке
>по С++ я такого не
>встречал.

См.

The C++ Programming Language
Bjarne Stroustrup

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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