Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

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

27.06.2013, 20:02. Просмотров 812. Ответов 11
Метки нет (Все метки)


Добрый день. Давно не работал с шаблонами... Вроде всё верно, но компилятор выдаёт ошибку:
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);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2013, 20:02
Ответы с готовыми решениями:

Странная ошибка при компиляции
Пишу элементарный код, допустим Form1.Label1.Caption:='anystring' или If...

Странная ошибка при компиляции триггера
Все довольно просто, пишу программу на Delphi, в ней создаю таблицы и триггер для автоинкремента...

Странная ошибка при компиляции проекта
Работаю с COM-портом, используя библиотеки Synapse. Иногда при компиляции выводятся странные...

Странная ошибка при компиляции проекта
Доброго времени суток Господа. Работаю над проектиком, решил слегка его изменить. Изменил совсем...

11
279 / 278 / 83
Регистрация: 03.02.2013
Сообщений: 795
27.06.2013, 20:05 2
это ругается линкер, а не компилятор
вероятнее всего у вас в проект не включены исходники
0
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,429
Записей в блоге: 1
27.06.2013, 20:07 3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Файлы:
раздельная компиляция для шаблонов? Ай-яй
Код шаблона должен быть доступен для инстанционирования
1
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:10  [ТС] 4
@Croessmah, @abit, Спасибо, что проявили интерес к моей теме. Но пожалуйста, объясните нубу более простыми словами.
0
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,429
Записей в блоге: 1
27.06.2013, 20:13 5
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но пожалуйста, объясните нубу более простыми словами.
реализацию шаблонного класса в .h файл с объявлением поместите
2
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:17  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
реализацию шаблонного класса в .h файл с объявлением поместите
Спасибо, насчёт этого я догадался исходя из вашего первого ответа. Мне неясно почему именно так? А именно хотелось узнать толкование вот этой вот фразы:
Цитата Сообщение от Croessmah Посмотреть сообщение
Код шаблона должен быть доступен для инстанционирования
. За ранее, спасибо.
0
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,429
Записей в блоге: 1
27.06.2013, 20:22 7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Мне неясно почему именно так?
Потому что код шаблона должен быть доступен, иначе из чего компилятор будет создавать код?
Ведь ему нужно откуда-то брать реализацию функций
0
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:30  [ТС] 8
@Croessmah, Тогда почему к обычными не шаблонным классам и функциям это не относится?
0
What a waste!
1588 / 1287 / 173
Регистрация: 21.04.2012
Сообщений: 2,696
27.06.2013, 20:34 9
@xtorne21st, какой объектный код должен был бы получиться после компиляции неинстанциированного шаблона (если бы это было возможно)?
1
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,429
Записей в блоге: 1
27.06.2013, 20:35 10
Цитата Сообщение от xtorne21st Посмотреть сообщение
Тогда почему к обычными не шаблонным классам и функциям это не относится?
Потому что шаблонный класс - ЭТО МАКЕТ, а не конкретный класс.
Вы же не можете жить в чертеже дома, дом нужно построить. А чтобы его построить нужен чертеж того что строить будем
1
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 20:38  [ТС] 11
Всем спасибо, вопросов больше нет.
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.06.2013, 20:43 12
Цитата Сообщение от xtorne21st Посмотреть сообщение
Тогда почему к обычными не шаблонным классам и функциям это не относится?
Для них коды уже написаны и компилятор, встретив, например, вызов не шаблонной функции, только проверяет соответствие вызова прототипу, поэтому в этом файле (компилятор видит в каждый момент только один файл) должен быть прототип функции. Если же компилятор встречает вызов шаблонной функции, он должен создать её код (шаблон это не код, а образец для создания кода), поэтому в этом файле (где находится вызов шаблонной функции) должно быть всё, что ему для этого нужно, т.е. объявление шаблона и его реализация.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2013, 20:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Странная ошибка при компиляции из консоли
Вот код: public class Int { int value=0; /* INCREMENT */ public void increment() {...

Появилась странная ошибка при компиляции проекта
&quot;Error: Could not find or load main class com.KP.server.Server&quot; package com.KP.server;//пакет...

ошибка при компиляции проги, использущей шаблоны классов
Возникла ошибка при компиляции проги, использующей шаблоны. Ошибка - undefined symbol /*...*/ in...

Странная ошибка при компиляции очень очень большой проги ,,boomerang,,
Я в общем, даже и не представляю, куда смотреть в поисках ошибки. Ошибка 1 error LNK2019: ссылка...


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

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

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