2017-07-09 10 views
0

私自身のVector3クラス(3Dベクトルのクラス)を作成しようとしていますが、少し問題がありました。 (私は問題を理解していれば)私は宣言することはできませんというクラスの標準インスタンスを内部で定義する(C++)

Vector3::zero; 
Vector3::one; 

しかし、それはそうです: 私の目標を定義することです:

static const Vector3 zero = Vector3 (0.0, 0.0, 0.0); 
static const Vector3 one = Vector3 (1.0, 1.0, 1.0); 

をするVector3クラスの内部で、私はしてアクセスすることができます(Vector3定義のVector3のように)同じクラスの内部にクラスインスタンスを作成することはできません。なぜなら、0と1を宣言すると、Vector3自体の定義はまだ完了していないからです。 この問題を解決するための回避策をご存知ですか?可能であれば、Vector3(0.0、0.0、0.0)またはVector3(1.0,1.0,1.0)を返す関数を使用せず、追加の計算なしで静的const変数を使用することをお勧めします。

+0

なぜVector3クラスにVector3インスタンスが含まれている必要がありますか?あなたのデザインに何か問題があるように思えます。 –

+1

@NeilButterworth複雑な型の定数式であるため、センチネル値、短縮形式、または一般的な数式定数をクラススコープ内に持つことはかなり一般的です。 – Shaggi

答えて

8

しかし、それらを定義して外部に初期化する必要もあります。

// In a header file: 
class Vector3 { 
public: 
    Vector3(double, double, double); 

    static const Vector3 zero; 
    static const Vector3 one; 
}; 

// In some source file: 
#include "vector3.h" 
const Vector3 Vector3::zero(0.0, 0.0, 0.0); 
const Vector3 Vector3::one(1.0, 1.0, 1.0); 
関連する問題