template неправильно работает [дубликат]

321
24 января 2017, 23:06

На данный вопрос уже ответили:

  • Вынести метод шаблонного класса в .cpp 3 ответа

// header.hpp

template<typename T1, typename T2> class A
{
   T1 a;
   T2 b;
public:
   A(void);
};

//header.cpp

template<typename T1, typename T2> A<T1, T2>::A(void)
{
   ...
}

// main.cpp

#include "header.hpp"
int main(void)
{
   A<double, double> a;
   return 0;
}

// errors : undefined reference to A<double, double>::A(void) Я что-то неправильно написал. Но что самое страшное: когда я помещаю это все в один файл, внимание, все работает! компилирование:

 1 all: prog
  2 
  3 prog: header.o main.o
  4         g++ header.o main.o -g -o prog
  5 main.o: main.cpp
  6         g++ main.cpp -c -g -o main.o
  7 header.o: header.cpp header.hpp
  8         g++ header.cpp -c -g -o header.o
  9 clean:
 10         rm *.o
 11         rm prog
Answer 1

Не выносите реализации шаблонов в отдельные файлы!
Это может сработать, но в особых, редких ситуациях.

Весь код шаблона располагайте в заголовочном файле, и будет вам счастье :)

Answer 2

Когда дело имеете с шаблонами, тогда в файл, где находится точка входа, необходимо подключать файл с расширением .сpp, где реализован ваш шаблонный класс.

READ ALSO
Преобразование char в const char*

Преобразование char в const char*

Эта функция принимает вектор типа char и возвращает числоВ каждой ячейке вектора хранится одна цифра

330
Исключение вещественных чисел в int

Исключение вещественных чисел в int

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

289
Проблема с использованием SRWLOCK в MFC проекте [требует правки]

Проблема с использованием SRWLOCK в MFC проекте [требует правки]

Здравствуйте, прошу подсказкиРаботал с длл с абстрактным интерфейсом, содержащей набор функций для моего приложения

341