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

Шаблоны странная ошибка во время компиляции - C++

Восстановить пароль Регистрация
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:02     Шаблоны странная ошибка во время компиляции #1
Добрый день. Давно не работал с шаблонами... Вроде всё верно, но компилятор выдаёт ошибку:
Bash
1
2
error: undefined reference to 'MyClass<int>::MyClass(int)'
error: collect2: ld returned 1 exit status
Файлы:
MyClass.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef MYCLASS_H
#define MYCLASS_H
 
template <class T>
class MyClass
{
    /* *** */
public:
     MyClass(T);
     /* *** */
};
 
#endif
MyClass.cpp:
C++
1
2
3
4
5
6
7
8
9
#include "MyClass.h"
 
template <class T>
MyClass<T>::MyClass(T val)
{
    /* *** */
}
 
/* *** */
main.cpp:
C++
1
2
3
4
5
6
#include "MyClass.h"
 
int main()
{
    MyClass<int> obj(5);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2013, 20:02     Шаблоны странная ошибка во время компиляции
Посмотрите здесь:

ошибка при компиляции проги, использущей шаблоны классов C++
C++ Странная ошибка
Ошибка во время компиляции C++
Шаблоны и определение SSE типов на этапе компиляции C++
C++ Странная ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
27.06.2013, 20:05     Шаблоны странная ошибка во время компиляции #2
это ругается линкер, а не компилятор
вероятнее всего у вас в проект не включены исходники
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
27.06.2013, 20:07     Шаблоны странная ошибка во время компиляции #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Файлы:
раздельная компиляция для шаблонов? Ай-яй
Код шаблона должен быть доступен для инстанционирования
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:10  [ТС]     Шаблоны странная ошибка во время компиляции #4
@Croessmah, @abit, Спасибо, что проявили интерес к моей теме. Но пожалуйста, объясните нубу более простыми словами.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
27.06.2013, 20:13     Шаблоны странная ошибка во время компиляции #5
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но пожалуйста, объясните нубу более простыми словами.
реализацию шаблонного класса в .h файл с объявлением поместите
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:17  [ТС]     Шаблоны странная ошибка во время компиляции #6
Цитата Сообщение от Croessmah Посмотреть сообщение
реализацию шаблонного класса в .h файл с объявлением поместите
Спасибо, насчёт этого я догадался исходя из вашего первого ответа. Мне неясно почему именно так? А именно хотелось узнать толкование вот этой вот фразы:
Цитата Сообщение от Croessmah Посмотреть сообщение
Код шаблона должен быть доступен для инстанционирования
. За ранее, спасибо.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
27.06.2013, 20:22     Шаблоны странная ошибка во время компиляции #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Мне неясно почему именно так?
Потому что код шаблона должен быть доступен, иначе из чего компилятор будет создавать код?
Ведь ему нужно откуда-то брать реализацию функций
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:30  [ТС]     Шаблоны странная ошибка во время компиляции #8
@Croessmah, Тогда почему к обычными не шаблонным классам и функциям это не относится?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.06.2013, 20:34     Шаблоны странная ошибка во время компиляции #9
@xtorne21st, какой объектный код должен был бы получиться после компиляции неинстанциированного шаблона (если бы это было возможно)?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
27.06.2013, 20:35     Шаблоны странная ошибка во время компиляции #10
Цитата Сообщение от xtorne21st Посмотреть сообщение
Тогда почему к обычными не шаблонным классам и функциям это не относится?
Потому что шаблонный класс - ЭТО МАКЕТ, а не конкретный класс.
Вы же не можете жить в чертеже дома, дом нужно построить. А чтобы его построить нужен чертеж того что строить будем
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:38  [ТС]     Шаблоны странная ошибка во время компиляции #11
Всем спасибо, вопросов больше нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 20:43     Шаблоны странная ошибка во время компиляции
Еще ссылки по теме:

Шаблоны. Ошибка компиляции: "Не удается сопоставить определение функции существующему объявлению" C++
сравнение типов во время компиляции C++
C++ Странная ошибка при компиляции очень очень большой проги ,,boomerang,,

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.06.2013, 20:43     Шаблоны странная ошибка во время компиляции #12
Цитата Сообщение от xtorne21st Посмотреть сообщение
Тогда почему к обычными не шаблонным классам и функциям это не относится?
Для них коды уже написаны и компилятор, встретив, например, вызов не шаблонной функции, только проверяет соответствие вызова прототипу, поэтому в этом файле (компилятор видит в каждый момент только один файл) должен быть прототип функции. Если же компилятор встречает вызов шаблонной функции, он должен создать её код (шаблон это не код, а образец для создания кода), поэтому в этом файле (где находится вызов шаблонной функции) должно быть всё, что ему для этого нужно, т.е. объявление шаблона и его реализация.
Yandex
Объявления
27.06.2013, 20:43     Шаблоны странная ошибка во время компиляции
Ответ Создать тему
Опции темы

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