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

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

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

Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' - C++

17.11.2009, 15:36. Просмотров 746. Ответов 4
Метки нет (Все метки)

есть 3 файла. файл inc.h:
...
template <class T> class My
{
int m_size;
T *m_data;
public:
My(int value);
~My();
...
};

inc.cpp:
#include 'inc.h'

template <class T> My<T>::My(int value)
{
m_size = value; m_data = new T[value];
}

template <class T> My<T>::~My() { delete [] m_data; }

и наконец, main.cpp:
#include 'inc.h'

int main()
{
My<int> x;
}

компилится всё нормально, но линкер ругается:
unresolved external 'My<int>::My<int>(int)'
unresolved external 'My<int>::~My<int>'

использую Borland Free Compiler.
заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2009, 15:36     Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>'
Посмотрите здесь:

C++ Ошибка - перегруженность pow(int,int) неосуществима. Как исправить?
//unresolved external symbol "void_cdecl fun1(int,int)" (&fun1@@YAXHH@Z) referenced in function_main C++
Error: Unresolved external 'character::character(int)' C++
Ошибка в программе, адресная арифметика(Компилятор выдает ошибку "Cannot conver int* to int") C++
C++ error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл
C++ [Linker Error] Unresolved external 'Sort(int, int)' referenced from H:\INFORMATIC\5\UNIT1.OBJ
C++ Ошибка линкера: ссылка на неразрешенный внешний символ "public: int __thiscall stack<int>::pop(void)"
в Visual Studio пишет: отсутствует спецификатор типа-предполагается int.C++ не поддерживает int по умолчанию C++
C++ Ошибка в написании шаблона: invalid operands of types ‘int’ and ‘<unresolved overloaded function type>’
Error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C++
С++ ошибка error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C++
C++ Правильное объявление переменной с точки зрения стиля [int *a vs int* a]

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
2461 / 1683 / 216
Регистрация: 08.06.2007
Сообщений: 6,647
Записей в блоге: 4
17.11.2009, 16:42     Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' #2
Написать, как он просит

My<T>::My<T>(int value)

My<T>::~My<T>()
Willys
0 / 0 / 0
Регистрация: 20.05.2008
Сообщений: 26
17.11.2009, 16:58  [ТС]     Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' #3
так писать нельзя - синтаксическая ошибка. здесь дело в другом. компилятор почему-то не создаёт нормальных экспортов для шаблонов. вот я бы и хотел узнать, как с этим бороться. может опции какие-нибудь хитрые? (хотя вроде всё перепробовал уже).
palva
2461 / 1683 / 216
Регистрация: 08.06.2007
Сообщений: 6,647
Записей в блоге: 4
17.11.2009, 19:28     Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' #4
Да, ваша правда. Дело в том, что реализацию шаблонов надо перенести в h-файл. Компилятор компилирует шаблоны только для тех типов, обращения к которым имеются. Поэтому при компиляции inc компиляция шаблонов не происходит - компилятор не знает для каких типов нужно компилировать, а при компиляции main My<int>::My... не компилируется, поскольку отсутствует тело.

Кроме того, нужно добавить конструктор по умолчанию, поскольку он вызывается в программе main, либо вызывать конструктор с целым параметром.
Willys
0 / 0 / 0
Регистрация: 20.05.2008
Сообщений: 26
18.11.2009, 15:37  [ТС]     Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' #5
спасибо за помощь!
Yandex
Объявления
18.11.2009, 15:37     Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>'
Ответ Создать тему
Опции темы

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