'没有匹配的功能调用'对于子类/超类

时间:2017-04-11 01:28:37

标签: c++ subclass superclass

我得到了一个没有匹配的功能调用'错误,我无法弄清楚如何摆脱,似乎与我的子类不被识别为超类。我有一个带有子类Cube的超类Geometry,声明为:

class Cube : public Geometry {
    //code
    Intersection intersect(const Ray& ray_in, bool& intersected) const;
};

和Cube有一个返回交点的方法:

Intersection Cube::intersect(const Ray& ray_in, bool& intersected) const {
    // code
    return Intersection(point, normal, t_near, this);   //point and normal are vec4, t_near is double
}

我有一个Intersection构造函数:

Intersection(const glm::vec4& _point, const glm::vec4& _normal, Geometry* _geometry, const double _t);

但是当我尝试编译时,我的Cube :: intersect方法中的返回行会给出错误:

no matching function for call to 'Intersection::Intersection(glm::vec4&, glm::vec4&, float&, const Cube*)'
   return Intersection(point, normal, t_near, this);
                                                  ^

为什么它不会识别Cube是Geometry的子类并尝试调用正确的Intersection构造函数?

1 个答案:

答案 0 :(得分:0)

这似乎与子类无关。构造函数的参数完全错误:

return Intersection(point, normal, t_near, this); 

不清楚t_near是什么,但它可能是double。您将第三个参数的double传递给构造函数,并将this作为构造函数的第四个参数传递,这显然必须是某种指针。在进一步说明之前,请记住这一点......

然后,您还声称您的构造函数声明如下:

Intersection(const glm::vec4& _point, const glm::vec4& _normal,
             Geometry* _geometry, const double _t)

你的问题中显示了什么。现在,问问自己:这是构造函数的第三个参数double,第四个参数是某种指针,因为你在{{1}中构建了这个类的实例声明?