代码:
std::ostream& operator << (std::ostream& out, point p) {
out << "(" << p.x << ", "<< p.y<< ", "<< p.z << ")";
return out;
}
错误:
实际上,代码在“问题与解决方案”的第40页中类似。科学计算中的解决方案»(除了我使用3D而不是2D)。“的std :: ostream的&安培; KillThemAll :: point :: operator&lt;&lt;(std :: ostream&amp;,KillThemAll :: point)' 必须采取一个参数 的std :: ostream的和放;运营商LT;&LT; (std :: ostream&amp; out,point p){out&lt;&lt; “(”&lt;&lt;&lt;&lt; p.x&lt;&lt;“,”&lt;&lt; p.y&lt;&lt;“,”&lt;&lt; p.z&lt;&lt;“)”;退出;}
为了你的好奇心,这里有强大的结构«点»:
struct point{
double x,y,z;
point() { x=y=z=0.0;}
point(double _x, double _y, double _z){this->x=_x, this->y=_y, this->z=_z;}
point operator - (const point& _p) const { return point(x-_p.x, y-_p.y, z-_p.z);}
point operator + (const point& _p) const { return point(x+_p.x, y+_p.y, z+_p.z);}
double operator * (const point& _p) const { return x*_p.x+y*_p.y+z*_p.z;}
point operator * (const double _t) const { return point(_t*x, _t*y, _t*z);}
point operator / (const double _t) const { if(_t!=0) return point(x/_t, y/_t, z/_t);}
};
答案 0 :(得分:1)
从错误消息中,您似乎将operator<<
声明为point
类中的成员函数。这不是你想要的。
相反,将其声明为自由函数(在point
类之外)。如果需要访问point
的私人成员,请将其设为好友。
<强>为什么吗
当你考虑它时,很明显任何operator<<
必须有两个参数; <<
左侧一个,右侧一个。如果在类中声明运算符,则左参数自动被视为有问题的对象(this
),因此您只能告诉它正确的参数应具有的类型。如果将其声明为自由函数,则可以选择左右参数类型。