未定义对继承函数的引用

Tejas Srinivasan

我正在实施A *算法来解决几个问题-8个难题问题和另一个问题。对于A Star,我在A_star.hpp中实现了三个通用类:

template <class U>
class Heuristic{
public:
    virtual int getHeuristic(Node<U> currNode, Node<U> target);
};

template <class V>
class NextNodeGenerator{
public:
    virtual vector<pair<V, int> > generate(Node<V> curr);
};

template <class W>
class CompareVal{
public:
    virtual bool compare(W val1, W val2);
};

为了解决8难题问题,我为上述每个通用类在prob2.cpp中实现了三个子类:

template <class hT>
class PuzzleHeuristic: public Heuristic<hT>{
public:
    virtual int getHeuristic(Node<hT> currNode, Node<hT> target){
        //Code for getHeuristic
    }
};

template <class cT>
class PuzzleCompareVal: public CompareVal<cT>{
public:
    virtual bool compare(cT val1, cT val2){
        //Code for compare
    }
};

template <class nT>
class PuzzleNNG: public NextNodeGenerator<nT>{
public:
    virtual vector<pair<nT, int> > generate(Node<nT> curr){
        //Code for generate
}

在A_star.hpp中,我还有一个AStar类:

template <class Y>
class AStar{
    Heuristic<Y> *h;
    NextNodeGenerator<Y> *nng;
    CompareVal<Y> *comp;

public:

    void setHeuristic(Heuristic<Y> *hParam){
        h = hParam;
    }

    void setNNG(NextNodeGenerator<Y> *nngParam){
        nng = nngParam;
    }

    void setCompareVal(CompareVal<Y> *compParam){
        comp = compParam;
    }

    vector<Node<Y> > solve(Y start, Y target){
        //Code for solve
    }

在prob2.cpp的main()函数中,我创建了一个AStar对象(Array是我单独定义的模板类):

int main()
{
    PuzzleHeuristic<Array<int> > pH;
    PuzzleCompareVal<Array<int> > pCV;
    PuzzleNNG<Array<int> > pNNG;

    AStar<Array<int> > aStar;
    aStar.setHeuristic(&pH);
    aStar.setNNG(&pNNG);
    aStar.setCompareVal(&pCV);

    vector<Node<Array<int> > > answer = aStar.solve(start, target);
}

编译时,出现以下错误:

/tmp/ccCLm8Gn.o:(.rodata._ZTV17NextNodeGeneratorI5ArrayIiEE[_ZTV17NextNodeGeneratorI5ArrayIiEE]+0x10):未定义对NextNodeGenerator<Array<int> >::generate(Node<Array<int> >)' /tmp/ccCLm8Gn.o:(.rodata._ZTV10CompareValI5ArrayIiEE[_ZTV10CompareValI5ArrayIiEE]+0x10): undefined reference toCompareVal> :: compare(Array,Array)'的引用/tmp/ccCLm8Gn.o:(.rodata._ZTV9HeuriEE+] ):未定义对`Heuristic> :: getHeuristic(Node>,Node>)的引用collect2:错误:ld返回1退出状态Blockquote

我怀疑问题是由于模板函数的继承所致。是什么原因引起的错误?

一些程序员哥们

所有虚拟函数都需要一个定义,即使它们在子类中被覆盖也是如此。如果您不想在基类中实现它们,并强制子类重写函数,则应使它们在基类中抽象化,例如

template <class V>
class NextNodeGenerator{
public:
    virtual vector<pair<V, int> > generate(Node<V> curr) = 0;
    //                                                  ^^^^
    //   This is what makes the function an abstract function 
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对定义的构造函数的“未定义引用”

来自分类Dev

对定义的构造函数的“未定义引用”

来自分类Dev

对已定义函数的未定义引用

来自分类Dev

带有菱形继承的 c++ (g++) 函数的未定义引用

来自分类Dev

未定义对函数调用的引用?

来自分类Dev

未定义对函数send的引用

来自分类Dev

未定义对swscale函数的引用

来自分类Dev

未定义对'gnutls _...'函数的引用

来自分类Dev

未定义对模板成员函数的引用

来自分类Dev

未定义对某些opencv函数的引用

来自分类Dev

未定义的函数错误引用

来自分类Dev

构造函数中的未定义引用

来自分类Dev

未定义对Aruco函数的引用

来自分类Dev

未定义对函数的引用?C ++

来自分类Dev

未定义对cusolverDn函数的引用

来自分类Dev

gcc对portaudio函数的未定义引用

来自分类Dev

C ++:对构造函数的未定义引用

来自分类Dev

未定义对静态函数的引用

来自分类Dev

在main()中未定义对函数的引用

来自分类Dev

未定义对函数c的引用

来自分类Dev

未定义对Makefile中的“函数”的引用

来自分类Dev

引用错误:函数未定义

来自分类Dev

未定义对自写函数的引用

来自分类Dev

未定义对espeak函数的引用

来自分类Dev

JsonBox函数的未定义引用

来自分类Dev

未定义的函数引用(C ++)

来自分类Dev

C ++:对void函数的未定义引用

来自分类Dev

对C ++中函数的未定义引用

来自分类Dev

对C ++中函数的未定义引用