2013-01-03 42 views
1

我有一個名爲Vec2D的類來處理2D矢量操作。C++ Vector2D類操作

Vec2D pos1 = Vec2D(100, 100); 
    Vec2D pos2 = Vec2D(100, 100); 

我有運營商重載這樣的運算可以更簡單。因此,我可以做到以下幾點:

Vec2D difference = pos1-pos2; 
float distance = difference .magnitude(); 

我想知道是有可能做算術這樣我的同班同學?:

float distance = (pos1-pos2).magnitude(); 

我試圖編譯,但它給了我奇怪的錯誤,因爲「Vec2D類沒有迭代器......」 我想出來的唯一原因就是能解釋這個事實,即結果中沒有類。

+0

不應該是浮動距離=(pos1-pos2).magnitude()? – jonathanasdf

+2

我們應該如何回答而不知道你是如何定義'operator-'?無論如何,這當然是可能的,並且是一種使用C++的流行方式。 [Eigen庫](http://eigen.tuxfamily.org/)是向量等的一個非常好的實現。 – Potatoswatter

回答

1

這裏的問題可能是您實施-運營商的方式。原型應該是:

Vec2D operator- (const Vec2D &rhs) const 

或類

Vec2D operator- (const Vec2D& v1, const Vec2D& v2) 

以外如何操作員申報?特別是 - 什麼是操作返回類型?

+1

非成員更好:相同的轉換適用於左側和右側操作數。會員導致不對稱,這可能會導致棘手的錯誤。此外,最好按值傳遞非成員的一個操作數,然後修改並返回它,以幫助編譯器消除副本。 – Potatoswatter

+0

嗯,我確實有函數返回Vec2D,但它是一個朋友函數。這會有什麼不同嗎? – sgtHale

+0

的確如此。你應該發佈你的運營商代碼。 –