2011-07-18 81 views
0

我的繼承人類操作符重載奇怪的結果

​​

試圖用更復雜的公式,當我得到不正確的結果。例如這個工程:

Vector vChange = velocity * time; 
position += vChange; 

,而這並不:

position += velocity * time; 

即它可以編譯和運行,但寫一些虛假到位

同樣爲這一個:

Vector& Reflect(const Vector& I, const Vector& N) 
{ 
Vector v = I - 2 * Dot(N, I) * N; 
} 

你能告訴我我做錯了什麼嗎?謝謝!

+1

我推薦閱讀[運算符重載常見問題](http://stackoverflow.com/q/4421706/46642)。 –

回答

5

您正在返回對operator*中局部變量的引用。這是未定義的行爲。按價值返回:

Vector Vector::operator*(float n) const 
{ 
    Vector result = *this; 
    result.x *= n; 
    result.y *= n; 
    result.z *= n; 
    return result; 
} 

operator+相同。

1

您正在返回對局部變量的引用。不要這樣做。您的非賦值運算符應該按值返回,而不是通過引用。

2

對於您的operator*operator+,您必須按值返回Vector,而不是通過引用。你那裏有什麼是返回一個懸而未決的參考,這是未定義的行爲。

+0

我仍然會返回+ =的參考嗎? –

+0

@Mikhail:是的,因爲你在這種情況下返回'this',而不是一個超出範圍的局部變量。 –