我得到了一个没有匹配的功能调用'错误,我无法弄清楚如何摆脱,似乎与我的子类不被识别为超类。我有一个带有子类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构造函数?
答案 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}中构建了这个类的实例声明?