У меня есть C++, используя класс, указанный в отдельных файлах .hpp/.cpp. Этот класс имеет особенность иметь шаблонную функцию-член, которая принимает аргумент const std::vector
, и вот корень проблемы.Невозможно скомпилировать/связать класс с шаблоном членом из отдельного .cpp
myclass.hpp
:
class myclass {
//...
public:
myclass();
template <typename _t> int myfunction(const std::vector<_t> *values);
//...
}
myclass.cpp
:
#include "myclass.hpp"
//...
template <typename _t> int myclass::myfunction(const std::vector<_t> *values){
// do stuff
return 0;
}
и мой main.cpp
:
#include "myclass.hpp"
int main(int argc, char const *argv[]){
myclass foo;
std::vector<int> bar(5,100);
foo.myfunction(bar);
return 0;
}
Однако, когда я пытаюсь скомпилировать все это с g++ main.cpp myclass.cpp -o main -I /usr/include
я получаю ошибку:
undefined reference to `int myclass::myfunction<int>(std::vector<int, std::allocator<int> > const*)'
что странно, так как синтаксис кажется правильным (и она проходит г ++ проверка). Проблема заключается не в том, как я создаю код или настройку файла, так как я могу скомпилировать код, если я прокомментирую шаблонную функцию.