У меня есть .h и. cpp файл
Foo.h
template<typename T>
class Foo {
public:
void g();
void h();
};
Foo. cpp
#include <iostream>
#include "Foo.h"
template<typename T>
void Foo<T>::g()
{
std::cout << "Foo<T>::g()\n";
}
template<typename T>
void Foo<T>::h()
{
std::cout << "Foo<T>::h()\n";
}
Два вышеуказанных файла находятся в каталоге abc / def, и у меня есть реализация в другом cpp файле
Foo-impl. cpp
#include <../../Foo.cpp>
template class Foo<int>;
Этот Foo-impl.cpp
находится в abc / ghi / jkl.
Но когда я использую #include <abc/def/Foo.cpp
, я получаю сообщение об ошибке, что файл не существует. Но когда я использую #include <abc/def/Foo.h>
, я не получаю, что файл не содержит ошибки (файл определяется компилятором), но я получаю ошибку компоновщика.
Я использую реализацию согласно ссылка
Почему работает с <../../Foo.cpp>
и почему не с <abc/def/Foo.cpp
. Как заставить его работать?