2011-09-21 272 views

回答

8

你在做什麼錯在這裏在語言層面上是重載操作符的指針。重載操作符的至少一個參數必須是用戶定義的類型或對其的引用。

但是你在另一層面上也做錯了。您正在返回一個指針,這意味着您可能需要在運算符中動態分配一些存儲。那麼,誰擁有這種存儲?誰會釋放它?

你應該只需要引用和返回值,是這樣的:

template <typename T> 
Point<T> operator +(Point<T> const& point, Vector<T> const& vector) { 
    return Point<T>(point.x + vector.x, point.y + vector.y); 
} 
+0

我返回一個指針的原因之一是我無法弄清楚如何按值返回。我從哪裏得到這個Point ?我不能做一個新的(),並像這樣返回它。 –

+0

@Doug:我添加了一個例子,考慮了典型的Point和Vector類。如果你來自Java,你需要學習的第一件事是'new'會被頻繁使用。 –

+0

這有什麼樣的分配?它與調用函數有什麼區別嗎? –

4

你不能爲基本類型重載操作符,在你的情況下,兩個參數都是指針。你想要參考嗎?

+0

因此,即使它是一個指向某個特定的類型,我還是不能超載呢? –

+0

@DougTreadwell這將是很難有指針,不指向特定類型不是嗎? ;) – quasiverse

+0

我的意思是,指向用戶定義的類型。但是我想編譯器不會看它指向什麼,只是它是什麼? –

4

當您定義一個運算符時,至少有一個參數必須是用戶定義的類或枚舉類型(或對其中一個引用)。指針不符合任何一個。您應該使用參考參數,並返回一個不合格的點<T>。

+0

我將如何退還不合格的積分? –

相關問題