关于“为什么不加friend就会提示参数过多”

 1 #include <iostream>
 2 using namespace std;
 3
 4 class Complex
 5 {
 6     double real, imag;
 7 public:
 8     Complex(double r, double i) :real(r), imag(i){}
 9     Complex operator+(double r);
10      Complex operator+ (double r, const Complex & c);//改为以下即可:friend Complex operator+ (double r, const Complex & c)
11     void ValueGet(){
12         cout << real << "," << imag << endl;
13     }
14 };
15 Complex Complex::operator+(double r)
16 {
17     return Complex(real + r, imag);
18 }
19
20 int main()
21 {
22     Complex c1(3,2);
23     c1=c1 + 3;
24     c1.ValueGet();
25 }

上述程序编译器会报错,错误是

Error 1 error C2804: binary ‘operator +‘ has too many parameters

原因就是,重载运算符时可以重载为成员函数和普通函数两种形式。

当重载为普通函数时,参数个数理应为运算符目数。

当重载为成员函数时,参数个数理应为运算符目数减一。

对于这里要重载的+号而言,运算符目数为2.如果重载为普通函数,参数个数应该为2。如果重载为成员函数,参数个数应该为1.

而这正对应于这里的加不加friend。当加了friend时,表示这个函数虽然是在类内部,但是却是一个普通函数而不是成员函数。参数应该为2个。而不加friend表示这是一个类的成员函数,参数应该为1个才对。

时间: 2024-10-13 13:08:42

关于“为什么不加friend就会提示参数过多”的相关文章

常量不加引号报错提示‘参数**没有默认值’

问:sql语句中常量不加引号报错提示'参数**没有默认值': 解决方法: 如下图所示加上英文状态下的引号:  字符串 要加上 单引号:''单引号 算一个 : 问:为何选中这列不需要加引号就能执行呢? 答: 选中那列 并非是 字符串列:数值列 不需要加 :

win7使用arp-d提示参数错误的解决办法。

在win7环境下,使用arp -d命令出现无法删除参数错误的解决办法.注意:是提示参数错误,不是提示权限需要提升 1.先运行:netsh i i show in 找到正在使用的网卡idx号 2.绑定ARP:netsh -c i i add neighbors 11 192.168.1.1 00-21-27-bc-89-48 就可以进行绑定了,这里11是idx号. 3.解绑ARP:netsh -c i i delete neighbors 11

Java开发WebServices传递pojo提示参数不匹配的问题

webservices服务用Java开发的时候,参数为基本数据类型是没有什么问题的. 但是如果是传递pojo,也就是java对象,可能你会遇到参数不匹配的问题. webservices接口暴露出来以后肯定是一个wsdl文件,看到网上很多文章说"webservices传递pojo的时候,提示参数不匹配,很多人解决方式是把接口和pojo放在一起就好用了.这个其实是表象" This XML file does not appear to have any style information

sql读写图片时Image.FromStream方法提示参数错误问题解决

我们通常这么写 using (SqlDataReader drm = sqlComm.ExecuteReader()) { drm.Read();//以下把数据库中读出的Image流在图片框中显示出来. MemoryStream ms = new MemoryStream((byte[])drm["Logo"]); Image img = Image.FromStream(ms); this.pictureBox1.Image = img; } 我的写数据 private void b

jdbc查询sybase参数过多问题

公司的数据库一直是sybase,用起来也挺好的,最新客户现场出现一个问题,数据无法传输了,看日志非常简单,一下就定位到了原因. 很简单,参数超过了2000个,因为这个功能是根据主表的主键查询子表,方法用的是where 主表id in (?,?,?,?--)方式,参数问号最多是是2000个,不过这就奇怪了,直接使用sql查询sybase,5000个参数也没问题,看来是jdbc驱动的问题了. 我们公司用sybase也有十多年了,这方面还是很有研究的,请教了几个人,jdbc连接sybase的驱动之前用

java参数过多,怎么处理?

本人对java的研究甚少,以前只是用一用,从未有过深度的学习,但却意外的发现了一个问题,那就是java的参数过多会出现错误,大家可能会认为,我找到的这个问题没有任何意义,对,我也是这样想的,但是,大家不妨来听我讲一讲,看看是不是这样的道理,如果不是,也请大神们提出错误,并给我一个合适的答案,让我的知识也能够有所提升,具体错误可见截图: 当然,这个错误不仅使用javac进行编译的时候会报错,而且在eclipse中也会报错,错误内容一致,参数过多 在这里我提出了以下几个问题: 1.java的方法到底

fastreport5 有变量时 不加引号字符串出错 提示没有声明的变量

不加引号 错误提示:没有声明的变量 frxReport1.Variables['bt'] := QuotedStr(getyym + _('门诊挂号员日报')); frxReport1.Variables['czy'] := QuotedStr( dosql.fieldbyname('xingm').AsString); frxReport1.Variables['DaX'] := QuotedStr( ReadRMB(Query1ShouFJE.Value - query1tuifje.Val

友点企业建站-小程序支付提示“参数配置错误”

我们在登录友点企业建站后台[微信接口]配置对接好微信小程序支付接口参数  商户号+支付秘钥  但是测试提交支付还是会提示支付参数错误,这到底是怎么回事呢? 原因经过查明是此支付信息账号是同一账号主体认证的微信公众号的,如果需要在小程序对接,那就需要先绑定授权才可以. 下面就介绍授权的主要操作部分: 1.商户号在商户平台填写相关APPID信息,发起授权申请:点击"产品中心->开发配置->APPID授权管理->新增授权",进入授权申请页面 1.商户号在商户平台填写相关AP

Ant打包jar,参数名变为无意义的arg0,arg1,Java代码提示参数名称无意义

症状: 使用ant打包的jar,变量变成如下无意义的arg0,arg1. 代码提示也同样. 而使用Eclipse的导出jar就没有问题 解决方法: 让ant使用Eclipse的打包功能. 1.在build.xml的javac命令中增加 debug="true"    debuglevel="lines, vars, source"这两行属性 2.在build.xml的头部增加<property name="build.compiler" v