2017-04-11 29 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); 
               ^

キューブがジオメトリのサブクラスであり、正しい交差コンストラクタを呼び出そうとしていないのはなぜですか?

答えて

0

これはサブクラスとは関係ありません。

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

それが何であるかt_near明確ではないが、それはdoubleになりそうだ:コンストラクタのパラメータは、単に間違っています。コンストラクタに3番目のパラメータのdoubleを渡しており、コンストラクタの4番目のパラメータとしてthisを渡しています。これは明らかに何らかのポインタでなければなりません。

その後、あなたはまた、次のようにコンストラクタが宣言されていることを主張する...さらに行く前に、その精神的なメモを作成します。あなたの質問に何を示していますだ

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

。さて、このコンストラクタの3番目のパラメータはdoubleであり、4番目のパラメータはreturn文でこのクラスのインスタンスを構築しているときに何らかのポインタですか?

+0

ええと私は順序をチェックしていませんでした。クラスの継承と関係があると仮定する前に引数を渡しました...ありがとう –

関連する問題