0

次のように定義されたクラスがあります。

// 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

何度か見直しましたが、このエラーの原因がわかりません...

4

1 に答える 1