2016-08-22 7 views
-3

を関数の呼び出しのための一致:私はレイトレーサをプログラムしようとしていると私は次のエラーのため、私のプログラムをコンパイルするカントC++

src\util\Ray.cpp: In constructor 'Ray::Ray()': src\util\Ray.cpp:8:17: error: no match for call to '(Vector3D) (double, double, double)'
o(0.0, 0.0, 0.0); ^makefile.mak:31: recipe for target 'Ray.o' failed mingw32-make: *** [Ray.o] Error 1

これはコードです:

//Vector3D.h 
#ifndef __VECTOR3D__ 
#define __VECTOR3D__ 

class Vector3D{ 
    public: 

     float x; 
     float y; 
     float z; 

    public: 

     Vector3D(void); 
     Vector3D(const float&, const float&, const float&); 
     Vector3D(const Vector3D& obj); 
}; 

#endif 



//Vector3D.cpp 
#include <iostream> 

#include "Vector3D.h" 

using namespace std; 

Vector3D::Vector3D(void){ 
    x  = 0.0; 
    y  = 0.0; 
    z  = 0.0; 
} 

Vector3D::Vector3D(const float &p_x, const float &p_y, const float &p_z){ 
    x  = p_x; 
    y  = p_y; 
    z  = p_z; 
} 

Vector3D::Vector3D(const Vector3D& obj){ 
    x  = obj.x; 
    y  = obj.y; 
    z  = obj.z; 
} 



//Ray.h 
#ifndef __RAY__ 
#define __RAY__ 

#include "Vector3D.h" 

class Ray{ 
    public: 

     Vector3D o; 
     Vector3D d; 

    public: 

     Ray(void); 
}; 

#endif 



//Ray.cpp 
#include "Ray.h" 

Ray::Ray(void){ 
    o(0.0, 0.0, 0.0); 
} 

私はここで何が間違っているのか理解できない、誰かが説明できるか?

+3

たぶん 'this-> 0 =のVector3D(0.0、0.0、0.0);'の代わりに 'Oの(0.0、0.0、0.0); '? – DimChtz

+0

作品、ありがとうございます!あなたはなぜこのようにしなければならないのかを精巧に考えてもらえますか? – krbu

+1

OT:あなたの包囲警備員は違法です。 https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier –

答えて

1

あなたのコンストラクタのボディに到達するまでに、すべてのメンバーは既に初期化されています。

Ray::Ray(void){ 
    o(0.0, 0.0, 0.0); 
} 

ラインo(0.0, 0.0, 0.0);o.operator()(0.0, 0.0, 0.0)と同等です:これはあなたのRayコンストラクタであることを意味します。

メンバーにデフォルト以外のコンストラクタを呼び出すには、初期化リストを使用する必要があります。

Ray::Ray() : o(0.0, 0.0, 0.0) { 
    // note the body of the constructor is now empty 
} 
関連する問題

 関連する問題