2012-03-29 57 views
1

我想重載*運算符以便乘以兩個對象(點積)。C++中的重載運算符

這些對象可以是Point3D,Vector3DNormal。它們基本上都具有相同的結構(x,y和z值),我只將它們分解爲語義。

是給我找麻煩線路是這樣的:

float t = (point - r.origin)*normal/(r.direction * normal); 

這裏,點和r.origin是Point3D,正常是Normal和r.direction是Vector3D。在這些類的頭文件,我有以下過載功能:

在Vector3D.h:

Vector3D operator *(Normal& n); 

在Point3D.h:

Point3D operator -(Point3D& p); 
Point3D operator *(Normal& n); 

我得到的錯誤是:

No match for 'operator*' in 'r->Ray::direction * ((const Plane*)this)->Plane::normal' 

假設我已經正確地填寫了.cpp文件中的函數,有沒有什麼愚蠢的我已經完成這裏?另外,請忽略這樣一個事實,那就是沒有分工操作員......這正在進行中!

乾杯

回答

5

您可能已經定義了一元版本而不是二進制版本。 (您是否在類{...}內定義了它們?)

或者您可能沒有將它們定義爲const。試試這個:

Vector3D operator *(const Normal& n) const; 
Point3D operator -(const Point3D& p) const; 
Point3D operator *(const Normal& n) const; 

在過去這樣的hetrogeneous參數二元函數我覺得輕鬆了很多一起在全局範圍從班一個單獨的文件/地方和朋友他們定義所有。

2

你的this看起來像它可能const(只是從錯誤消息猜測,因爲你沒有在你的問題中包括該代碼)。嘗試:

Vector3D operator *(const Normal& n); 

Point3D operator -(const Point3D& p); 
Point3D operator *(const Normal& n); 
+0

歡呼的幫助,但將其全部更改爲常量給我'丟棄限定符'的錯誤。對不起,我昨天才開始C++:/ – 2012-03-29 00:23:27

+1

也許你可以給我們提供一個[* complete * example](http://sscce.org),它可以證明你遇到的問題。我們只能猜測代碼的其餘部分是什麼樣的,對任何人來說都沒有什麼效果。 – 2012-03-29 00:24:29

+0

'丟棄限定符'意味着你在函數中調用了一些不需要'const'的東西,但可能應該這樣做。向我們展示更多代碼。 – 2012-03-29 00:25:42