编写我自己的矢量类(用于游戏引擎)并在Visual Studio 2013 CPlusPlus项目中重载'+'运算符(使用VC运行时120),它给我带来了编译错误:
错误:此操作员功能的参数太多。
以下Vector.hpp
文件中的代码段。
Vector.hpp
class Vector
{
private:
double i;
double j;
double k;
public:
Vector(double _i, double _j, double _k)
{
i = _i;
j = _j;
k = _k;
}
Vector& operator+=(const Vector& p1)
{
i += p1.i;
j += p1.j;
k += p1.k;
return *this;
}
//Some other functionality...
Vector operator+(const Vector& p1, Vector& p2) //Error is thrown here...
{
Vector temp(p1);
return temp += p2;
}
};
我在这里做错了什么?不想让我的运算符超载非成员函数。
答案 0 :(得分:12)
在类中定义operator+
时,运算符的左操作数是当前实例。因此,要声明operator+
的重载,您有2个选择
选择1:课外
class Vector
{
private:
double i;
double j;
double k;
public:
Vector(double _i, double _j, double _k)
{
i = _i;
j = _j;
k = _k;
}
Vector& operator+=(const Vector& p1)
{
i += p1.i;
j += p1.j;
k += p1.k;
return *this;
}
//Some other functionality...
};
Vector operator+(const Vector& p1, const Vector& p2)
{
Vector temp(p1);
temp += p2;
return temp;
}
选择2:内部课程
class Vector
{
private:
double i;
double j;
double k;
public:
Vector(double _i, double _j, double _k)
{
i = _i;
j = _j;
k = _k;
}
Vector& operator+=(const Vector& p1)
{
i += p1.i;
j += p1.j;
k += p1.k;
return *this;
}
Vector operator+(consr Vector & p2)
{
Vector temp(*this);
temp += p2;
return temp;
}
};
您可以在此处查看如何声明运算符:C/C++ operators
答案 1 :(得分:1)
另一种可能性是使用friend关键字。
friend Vector operator+(const Number& n1, const Number& n2)
{
Vector temp(n1);
temp+=n2;
return temp;
}