【发布时间】:2011-09-21 02:29:51
【问题描述】:
函数声明:
template <typename T>
Point<T>* operator +(Point<T> const * const point, Vector<T> const * const vector);
自从我使用 C++ 以来已经有一段时间了,所以也许我正在做一些非常愚蠢的事情。告诉我。
另外,不,我没有使用命名空间标准。
【问题讨论】:
标签: c++ compiler-errors
函数声明:
template <typename T>
Point<T>* operator +(Point<T> const * const point, Vector<T> const * const vector);
自从我使用 C++ 以来已经有一段时间了,所以也许我正在做一些非常愚蠢的事情。告诉我。
另外,不,我没有使用命名空间标准。
【问题讨论】:
标签: c++ compiler-errors
您在语言级别上做错的是为指针重载运算符。重载运算符的至少一个参数必须是用户定义的类型,或者是对某个类型的引用。
但你在另一个层面上也做错了。您正在返回一个指针,这意味着您可能需要在运算符中动态分配一些存储空间。那么,谁拥有那个存储空间?谁来发布?
您应该只获取引用并按值返回,例如:
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);
}
【讨论】:
new的使用频率很高。
new 我的意思是“不经常使用。”
您不能为基本类型重载运算符,在您的情况下,两个参数都是指针。您是否想要参考资料?
【讨论】:
定义运算符时,至少有一个参数必须是用户定义的类或枚举类型(或对其中之一的引用)。指针不属于其中任何一个。您应该使用引用参数,并返回一个不合格的 Point
【讨论】: