新手问题

zhyinty 2008-09-23 07:08:08
定义重载
Vector3D operator + (const Vector3D& ,const Vector3D& );
Vector3D operator - (const Vector3D& ,const Vector3D& );
Vector3D operator = (const Vector3D& );
Vector3D operator += (const Vector3D& );

出现这种错误
error C2804: binary 'operator +' has too many parameters
c:\documents and settings\administrator\桌面\vector3d.h(20) : error C2804: binary 'operator -' has too many parameters

+和-不是2元操作符么,为什么会出现这种问题
...全文
117 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhao123 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhyinty 的回复:]
大家说重载定义成友元好还是成员函数好呢??
[/Quote]
如果是单目运算符,最好重载为成员函数,如果是双面运算符,最好重载为友元函数,不过如赋值运算符最好重载为成员函数为好。因为它如果被重载为友元函数,将会出现与赋值语义不一致的地方。
lockhall 2008-09-23
  • 打赏
  • 举报
回复
如果是成员函数,重载操作符第一个参数其实是this指针指向的对象;[Quote=引用楼主 zhyinty 的帖子:]
定义重载
Vector3D operator + (const Vector3D& ,const Vector3D& );
Vector3D operator - (const Vector3D& ,const Vector3D& );
Vector3D operator = (const Vector3D& );
Vector3D operator += (const Vector3D& );

出现这种错误
error C2804: binary 'operator +' has too many parameters
c:\documents and settings\administrator\桌面\vector3d.h(20) : error C2804: binary 'operator -' has too many …
[/Quote]
lockhall 2008-09-23
  • 打赏
  • 举报
回复
能不用友元就不用;[Quote=引用 7 楼 zhyinty 的回复:]
大家说重载定义成友元好还是成员函数好呢??
[/Quote]
elegant87 2008-09-23
  • 打赏
  • 举报
回复
Vector3D operator + (const Vector3D& ,const Vector3D& );
Vector3D operator - (const Vector3D& ,const Vector3D& );
是成员函数,默认的有一个对象的,也就是*this;
所以当你把+ -这些二元操作符重载为成员函数的时候只需一个参数的。
若是友元函数就需要两个参数了!如下:
friend Vector3D operator + (const Vector3D& ,const Vector3D& );
friend Vector3D operator - (const Vector3D& ,const Vector3D& );

微甜呼吸 2008-09-23
  • 打赏
  • 举报
回复
按需处理
一般情况下,左操作数是本类类型时用成员
左操作数不是本类类型时用友元
zhyinty 2008-09-23
  • 打赏
  • 举报
回复
大家说重载定义成友元好还是成员函数好呢??
zgjxwl 2008-09-23
  • 打赏
  • 举报
回复
成员函数的重载是有个默认的this指针形参的,你写成那样,实际就是在传三个参数,当然会提示上面的错误了,友员函数是没有这个this指针的
微甜呼吸 2008-09-23
  • 打赏
  • 举报
回复
你这几个函数应该是一个自定义的类里面的吧?
而且还把他们做为成员函数来声明的
自定义的类在把重载的操作符当成自己的成员函数时,有一个默认的左操作数
而且该默认的做操作数的类型为该自定义类类型的引用或指针
所以,你的参数表里面只要有一个参数就可以了
而且你在参数表里面声明的这个参数是做为右操作数的

你这样要写2个参数的话也可以,但是得把这个操作符声为类的友元函数,
然后在整个类的后面定义他们,返回直为类的引用

大致就是这个样子了,那书我才看了一遍,记得不是很清楚,有不对的地方见谅

class Vector3D{
friend Vector3D &operator + (const Vector3D& ,const Vector3D& );
friend Vector3D &operator - (const Vector3D& ,const Vector3D& );
public:
//.........
}

Vector3D& Vector3D::operator+(const Vector3D& ,const Vector3D& )
{
//定义...
}

Vector3D& Vector3D::operator-(const Vector3D& ,const Vector3D& )
{
//定义...大致形式和+的一样
}
bargio_susie 2008-09-23
  • 打赏
  • 举报
回复
顶下楼上的.
aayy 2008-09-23
  • 打赏
  • 举报
回复
Vector3D operator + (const Vector3D& );


friend Vector3D operator + (const Vector3D& ,const Vector3D& );

richbirdandy 2008-09-23
  • 打赏
  • 举报
回复
贴个完整的撒 这么看没什么错哈
bitxinhai 2008-09-23
  • 打赏
  • 举报
回复
Vector3D operator + (const Vector3D& ,const Vector3D& );
Vector3D operator - (const Vector3D& ,const Vector3D& );
你以成员函数的形式重载的吧!!!
以友员的方式这样应该是对的!!!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧