Daniro_San
@Daniro_San
Программист

Почему не получается отделить методы шаблонного класса?

Компилятор MinGW, codeblocks
Приведу пример:
Файл Eample.h
#pragma once
template<typename T> class Example
{
 public:
     int Get();
};

Файл Example.cpp
#include"Example.h"
template<typename T> int Example<T>::Get() { return 4; }

файл main.cpp
#include<iostream>
int main()
{
    Example<int> example;
    std::cout<<example.Get();
}

Выдает:
undefined reference to 'Examle::Get()'


Причем, когда я не подключаю "Example.h" и оставляю main пустым, все компилируется нормально.
Или когда оставляю Get в Example.h все тоже работает нормально:
Файл Eample.h
#pragma once
template<typename T> class Example
{
 public:
     int Get();
};
template<typename T> int Example<T>::Get() { return 4; }

Думаю, проблема не в линковщике, потому что когда я выношу из хедера в .cpp методы обычных, не шаблонных классов, все работает нормально.
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Тела шаблонных методов должны находится в *.h
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Выше вам уже ответили. От себя дополню, что если хочется куда-то "вынести" реализацию методов (а в некоторых случаях приходится это сделать), то можно создать файл с расширением tcc и подключить его в заголовочник, но снизу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы