У меня есть класс, определяемый следующим образом:компоновщика ошибка: символы Л.Д. не найдены
// grid_search.h
template<typename Element, typename Solution, typename Oracle>
class grid_search : public OptimizerInterface<Element, Solution, Oracle> {
private:
// ...
public:
virtual Solution search(const SpaceInterface<Element>& space, Oracle oracle);
};
и я реализую его в grid_search.cc
. Теперь я использую это так:
// needed extra definitions
typedef double (*oracle_f)(vector<int>&);
class TestSpace : public SpaceInterface<int> { /* ... */ }
static double f(vector<int>& x) { return 0.0; } // what ever f
// setup a search space and run the grid search
TestSpace space(/* ... */);
GridSearch<int, vector<int>, oracle_f> *optimizer = new GridSearch<int, vector<int>, oracle_f>();
optimizer->search(space, f);
Тогда ошибка линкера (обратите внимание, что все компилируется и grid_search.cc найден штраф):
Undefined symbols for architecture x86_64:
"GridSearch<int, std::vector<int, std::allocator<int> >, double (*)(std::vector<int, std::allocator<int> >&)>::search(SpaceInterface<int> const&, double (*)(std::vector<int, std::allocator<int> >&))", referenced from:
vtable for GridSearch<int, std::vector<int, std::allocator<int> >, double (*)(std::vector<int, std::allocator<int> >&)> in grid_search.cc.o
Я просмотрел его несколько раз, но может» t выяснить, какой корень этой ошибки ...
'поиск' не реализован. Или реализация не видна. –
Вы произвольно помещаете реализацию в файл .cpp? – juanchopanza
Возможный дубликат [Почему шаблоны могут быть реализованы только в файле заголовка?] (Http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) –