无法匹配函数定义,模板

时间:2016-05-07 15:33:13

标签: c++ inheritance override

我有一个名为 Box 的类继承自基类 Entitiy

在实体中,我有getWeight()功能;

double Entity::getWeight() {
    return weight;
}

我想在Box类中覆盖此函数。所以我这样做了;

template <class T>
double Box<T>::getWeight() {
    return weight + inWeight;
}

但它给了我这个错误

Error   C2244   'Entity::getWeight': unable to match function definition to an existing declaration

为什么我收到此错误?

编辑:实体类

class Entity {
    public:
        Entity(double weight_in, double length_in, double width_in);
        Entity();

        double getWidth();
        void setWidth(double);
        double getLength();
        void setLength(double);
        double getWeight();
        void setWeight(double);

    protected:
        double weight;
        double length;
        double width;
};

Box class

#include "entity.h"

template <class T>
class Box : public Entity{
    public:
        Box(double weight_in, double length_in, double width_in, double maximumAllowedWeight_in);
        Box();
        Box(Box<T>&);
};

2 个答案:

答案 0 :(得分:2)

你应该做Alan对Entity类所说的话。如果您希望调用Box中的getWeight()方法,当您从声明为实体类型对象的Box类型对象调用它时,您应该添加虚拟关键字,以便它实际覆盖(后期绑定):

class Entity {
    float weight = 10;
    virtual double getWeight(){
        return weight;
    }
};

参考:https://en.wikipedia.org/wiki/Virtual_function

答案 1 :(得分:1)

您需要在类定义中声明该函数,然后才能在外部定义它。 (或者你可以在课堂上定义它。)

template <typename T>
class Box : public Entity {
    double getWeight();
};

会使您的定义有效。

您可能需要考虑将其标记为const