2017-04-11 108 views
1

我得到'沒有匹配的函數調用'錯誤,我無法弄清楚如何擺脫,它似乎與我的子類不是承認爲超級類別。我有一個子類立方的超幾何,聲明如下:'沒有匹配的函數調用'的子類/超類

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

和多維數據集必須返回一個路口的方法:

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

這似乎與子類沒有任何關係。構造函數的參數是完全錯誤的:

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) 

。現在,問你自己:這是構造函數的第三個參數a double,第四個參數是某種類型的指針,因爲你在return語句中構造這個類的一個實例?

+0

是啊數字我沒有檢查我在通過我的論點之前,假設它與類繼承有關...命令 –