2015-01-15 46 views
3

我有一個問題與下面的代碼:無法應用操作/於操作數的結構和雙

public Vector3 Normalized 
{ get { return this/this.Length; } } 

我得到一個錯誤:

"Operator '/' cannot be applied to operands of type Vector3 and double"

爲什麼會出現這個錯誤?

這裏的整個結構以供參考:

struct Vector3 
{ 
    public double x; 
    public double y; 
    public double z; 

    public Vector3(double x, double y, double z) 
     : this() 
    { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 

    public double X 
    { get { return x; } set { x = value; } } 

    public double Y 
    { get { return y; } set { y = value; } } 

    public double Z 
    { get { return z; } set { z = value; } } 

    public static Vector3 operator +(Vector3 vecA, Vector3 vecB) 
    { 
     return new Vector3(vecA.X + vecB.X, vecA.Y + vecB.Y, vecA.Z + vecB.Z); 
    } 

    public static Vector3 operator -(Vector3 vecA, Vector3 vecB) 
    { 
     return new Vector3(vecA.X - vecB.X, vecA.Y - vecB.Y, vecA.Z - vecB.Z); 
    } 

    public static Vector3 operator *(Vector3 vecA, Vector3 vecB) 
    { 
     return new Vector3(vecA.X * vecB.X, vecA.Y * vecB.Y, vecA.Z * vecB.Z); 
    } 

    public static Vector3 operator /(Vector3 vecA, Vector3 vecB) 
    { 
     return new Vector3(vecA.X/vecB.X, vecA.Y/vecB.Y, vecA.Z/vecB.Z); 
    } 

    public double Dot(Vector3 vec) 
    { 
     return (this.X * vec.X + this.Y * vec.Y + this.Z * vec.Z); 
    } 

    public static Vector3 Cross(Vector3 vecA, Vector3 vecB) 
    { 
     return new Vector3(vecA.Y * vecB.Z - vecA.Z * vecB.Y, 
      vecA.Z * vecB.X - vecA.X * vecB.Z, 
      vecA.X * vecB.Y - vecA.Y * vecB.X); 
    } 

    public double Length 
    { get { return Math.Sqrt(X * X + Y * Y + Z * Z); } } 

    public double LengthSq 
    { get { return X * X + Y * Y + Z * Z; } } 

    public Vector3 Normalized 
    { get { return this/this.Length; } } 
} 
+5

遠遠看你超載了'/'運營商 - 看它的操作數... –

+0

好吧,想急於寫10班會給窮人思維,謝謝。 – Januszoff

+0

編譯器錯誤應該給你一個線索:)每當編譯器說「我不能這樣做!」檢查你是否真的有代碼去做你想做的事...... –

回答

11

的結構沒有通過doubleVector3操作。它應該是這樣的:

public static Vector3 operator /(Vector3 vecA, double scalar) 
{ 
    return new Vector3(vecA.X/scalar, vecA.Y/scalar, vecA.Z/scalar); 
} 
+1

也許應該改變'*'運算符。 – juharr

+0

是的,謝謝你,從運營商+ - 快速複製副本。最難看的簡單錯誤。 – Januszoff

相關問題