如何在我的定义中使用大于运算符magnitude()
的函数重载的成员函数(在本例中为>
)?运算符应比较Vector2D
也是其成员的类magnitude()
的两个对象的大小。我收到以下内容:
错误C2662:'double Vector2D :: magnitude(void)':无法将'this'>指针从'const Vector2D'转换为'Vector2D&'
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
//*************************** Class Definition ***************************
class Vector2D {
public:
double i, j;
Vector2D(); // Default constructor
Vector2D(double, double); // Constructor for initializing
double magnitude(); // compute and return the magnitude
bool operator> (const Vector2D& right); // greater than
};
//function definitions:
//default constructor
Vector2D::Vector2D() {
i = 1;
j = 1;
}
/* constructor*/
Vector2D::Vector2D(double x, double y) {
i = x;
j = y;
}
/* magnitude funciton */
double Vector2D::magnitude()
{
return sqrt(pow(i, 2) + pow(j, 2));
}
******* //greater than Overload ************
bool Vector2D::operator> (const Vector2D& right) {
if (magnitude() > right.magnitude())
{
return true;
}
else
{
return false;
}
}
***********************************************
答案 0 :(得分:1)
两个变化:
bool Vector2D::operator> (const Vector2D& right) const
double Vector2D::magnitude() const
所有只读函数都应标记为 const 。您可以通过从const
的参数中删除> operator
来解决错误,但这样做不会很好。
答案 1 :(得分:1)
问题是您的功能未被声明为const
,因此无法应用于常量对象。这很容易解决:
double magnitude() const;
bool operator> (const Vector2D& right) const;
如果效率很重要,您可能希望在比较幅度时避免使用不必要的平方根:
double square_magnitude() const {return i*i + j*j;}
bool operator> (const Vector2D& right) const {
return square_magnitude() > right.square_magnitude();
}