Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
#1

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

04.08.2013, 17:58. Просмотров 440. Ответов 2
Метки нет (Все метки)

Есть такой код: файл "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;
}
В чем дело может быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 17:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Деструктор шаблона описанный в отдельном файле не линкуется. Почему? (C++):

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B - C++
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

Как использовать класс описанный в другом файле - C++
Есть проект, несколько файлов, в одном из них описаны классы. Как использовать эти классы в других файлах?

Почему деструктор не работает? - C++
Вроде написал все правильно, а почему то деструктор не работает, данные HI не выводит, почему ? #include &lt;iostream&gt; using namespace...

Почему не работает деструктор? - C++
Собственно говоря, почему? #include &lt;iostream&gt; using namespace std; class Osoba{ public : char* imie; int wiek; ...

Почему вызывается деструктор? - C++
Доброго времени суток. Написал такой код: struct O { virtual ~O() { cout &lt;&lt; &quot;hey&quot;; } }; struct...

Почему не работает деструктор? - C++
Подскажите пожалуйста, почему у меня не работает деструктор? #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; ...

2
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.08.2013, 18:10 #2
Не разбиваются шаблоны класса на файлы
1
Rebelition
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 22
04.08.2013, 18:11 #3
Шаблоны не являются функциями, поэтому их нельзя компилировать отдельно (ранее этот запрет обходился ключевым словом export, но в с++11 это слово в стандарт не входит).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 18:11
Привет! Вот еще темы с ответами:

Почему не отрабатывает деструктор? - C++
class test { public: double *b; test(); ~test(); } test::test() {

Почему не вызывается деструктор? - C++
Всем доброго времени суток! Подскажите пожалуйста - почему не вызывается деструктор при выполнении строки 48? #include&lt;iostream&gt;...

Почему может не работать деструктор? - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class Person { private: char* name; public: Person(char*...

Почему деструктор работает неправильно? - C++
на лабараторной столкнулся в проблемой. деструктор вызывается только один раз. #include &lt;cstring&gt; #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru