Форум программистов, компьютерный форум CyberForum.ru

Деструктор шаблона описанный в отдельном файле не линкуется. Почему? - C++

Восстановить пароль Регистрация
 
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
04.08.2013, 17:58     Деструктор шаблона описанный в отдельном файле не линкуется. Почему? #1
Есть такой код: файл "a.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template < typename T>
class A
{
public:
    A() { a=0; std::cout <<"c A"<< std::endl; }
    ~A();// { if(a) delete[] a; }
protected:
    T *a;
};
 
template < typename T>
A <T> ::
~A()
{ if(a) delete[] a; }
если все в одном файле - все ок.

Переношу ~A() в c.cpp - пишет:
Error error LNK2001: unresolved external symbol "public: __thiscall A<double>::~A<double>(void)" (??1?$A@N@@QAE@XZ)

файл "a.cpp"
C++
1
2
3
4
5
6
7
#include <iostream>
#include "a.h"
 
template < typename T>
A <T> ::
~A()
{ if(a) delete[] a; }
main:
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include "a.h"
 
int main()
{
    A<double> x;
    return 0;
}
В чем дело может быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 17:58     Деструктор шаблона описанный в отдельном файле не линкуется. Почему?
Посмотрите здесь:

C++ Почему деструктор работает неправильно?
Почему не отрабатывает деструктор? C++
C++ Переменные в отдельном файле
Как использовать класс описанный в другом файле C++
почему деструктор работает вначале? C++
Почему деструктор не работает? C++
Почему не работает деструктор? C++
C++ Почему не вызывается деструктор?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.08.2013, 18:10     Деструктор шаблона описанный в отдельном файле не линкуется. Почему? #2
Не разбиваются шаблоны класса на файлы
Rebelition
 Аватар для Rebelition
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 21
04.08.2013, 18:11     Деструктор шаблона описанный в отдельном файле не линкуется. Почему? #3
Шаблоны не являются функциями, поэтому их нельзя компилировать отдельно (ранее этот запрет обходился ключевым словом export, но в с++11 это слово в стандарт не входит).
Yandex
Объявления
04.08.2013, 18:11     Деструктор шаблона описанный в отдельном файле не линкуется. Почему?
Ответ Создать тему
Опции темы

Текущее время: 11:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru