Ситуация всем известная....
templ.h:
#ifndef __TEMPL_H
#define __TEMPL_H
template <class data_t> class templ{
data_t data;
public:
templ(data_t t);
data_t get(){ return data; }
};
#endif
============================================================
templ.cc:
#include "templ.h"
template <class data_t> templ<data_t>::templ(data_t t){
data = t;
}
=============================================================
test.cc:
#include <iostream>
#include "templ.h"
using namespace std;
int main(){
templ <int> t(10);
cout << t.get() << endl;
return 0;
}
=============================================================
Makefile:
OBJS = templ.o test.o
BINS = test
CC = g++
OPTIONS = -Wabi
.PHONY = all clean
all: $(BINS)
test: $(OBJS)
$(CC) $(OPTIONS) -o test $(OBJS)
templ.o: templ.h
test.o: templ.h
clean:
rm -f $(OBJS) $(BINS) *~
=============================================================
Если я это буду компилить впрямую, то получу мессагу:
$ make
g++ -c -o templ.o templ.cc
g++ -c -o test.o test.cc
g++ -Wabi -o clist templ.o test.o
test.o(.text+0x1a): In function `main':
: undefined reference to `templ<int>::templ[in-charge](int)'
collect2: ld returned 1 exit status
make: *** [clist] Error 1
$
Я обычно спрвалялся с этим методом дописывания в templ.cc следующего:
void __gccbug(){
templ <int> nw(1);
}
И так для каждого типа, или вообще описывая функции в h-нике.
Но вот как я это универским преподам буду объяснять (у нас сейчас курс ООП)? ;) Запихнуть в h-файл нельзя - "неправильное формирование рабочих файлов" ;)). И остваить функцию __gccbug тоже нельзя. :( Может опция какая-то к gcc есть или какой-нить другой солюшен? Помогите пожалуйста.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Makefile не собирается по шаблонному правилу (2007)
- Форум конструктор класса (2019)
- Форум Простой вопрос по C++ : ODR violation (2007)
- Форум [C++ такой C++]Шаблонные методы и разделение на .h/.cpp (2010)
- Форум Не компилируется программа opencv на Debian Buster (2018)
- Форум Трабла с template в С++ (2002)
- Форум [C++] Наследование шаблонов (2011)
- Форум C++, std::function, шаблоны, что я делаю не так? (2013)
- Форум [C++] имя метода как аргумент — как? (2005)
- Форум Перегрузка вирт функции в шаблоне (2014)