是什么导致C ++编译器错误:必须具有类或枚举类型的参数?

时间:2011-09-21 02:29:51

标签: c++ compiler-errors

功能声明:


template <typename T>
Point<T>* operator +(Point<T> const * const point, Vector<T> const * const vector);

自从我使用C ++已经有一段时间了,所以也许我做的事情非常愚蠢。让我知道。

另外,不,我没有使用命名空间标准。

3 个答案:

答案 0 :(得分:9)

你在语言层面上做错了的是重载操作符指针。重载运算符的至少一个参数必须是用户定义的类型,或者是对一个的引用。

但你在另一个层面上也做错了。您将返回一个指针,这意味着您可能需要在运算符中动态分配一些存储。那么,谁拥有那个存储?谁会释放它?

您应该只接受引用并按值返回,例如:

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);
}

答案 1 :(得分:4)

你不能为基本类型重载运算符,在你的情况下,两个参数都是指针。你想要参考吗?

答案 2 :(得分:4)

定义运算符时,至少有一个参数必须是用户定义的类或枚举类型(或对其中一个的引用)。指针不符合其中任何一项。您应该使用引用参数,并返回一个不合格的Point&lt; T&gt;。