函數聲明:什麼導致C++編譯器錯誤:必須具有類或枚舉類型的參數?
template <typename T>
Point<T>* operator +(Point<T> const * const point, Vector<T> const * const vector);
這已經有一段時間,因爲我用C++,所以也許我做一些非常愚蠢的。讓我知道。
另外,不,我沒有使用命名空間標準。
函數聲明:什麼導致C++編譯器錯誤:必須具有類或枚舉類型的參數?
template <typename T>
Point<T>* operator +(Point<T> const * const point, Vector<T> const * const vector);
這已經有一段時間,因爲我用C++,所以也許我做一些非常愚蠢的。讓我知道。
另外,不,我沒有使用命名空間標準。
你在做什麼錯在這裏在語言層面上是重載操作符的指針。重載操作符的至少一個參數必須是用戶定義的類型或對其的引用。
但是你在另一層面上也做錯了。您正在返回一個指針,這意味着您可能需要在運算符中動態分配一些存儲。那麼,誰擁有這種存儲?誰會釋放它?
你應該只需要引用和返回值,是這樣的:
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);
}
你不能爲基本類型重載操作符,在你的情況下,兩個參數都是指針。你想要參考嗎?
因此,即使它是一個指向某個特定的類型,我還是不能超載呢? –
@DougTreadwell這將是很難有指針,不指向特定類型不是嗎? ;) – quasiverse
我的意思是,指向用戶定義的類型。但是我想編譯器不會看它指向什麼,只是它是什麼? –
當您定義一個運算符時,至少有一個參數必須是用戶定義的類或枚舉類型(或對其中一個引用)。指針不符合任何一個。您應該使用參考參數,並返回一個不合格的點<T>。
我將如何退還不合格的積分
我返回一個指針的原因之一是我無法弄清楚如何按值返回。我從哪裏得到這個Point?我不能做一個新的(),並像這樣返回它。 –
@Doug:我添加了一個例子,考慮了典型的Point和Vector類。如果你來自Java,你需要學習的第一件事是'new'會被頻繁使用。 –
這有什麼樣的分配?它與調用函數有什麼區別嗎? –