当拷贝函数和运算符重载同时出现时,会出现错误
只有运算符重载时,函数正常运行
只有拷贝函数时,函数正常运行
当两个同时存在时,出现错误,问一下,这是什么错误
当拷贝函数和运算符重载同时出现时,会出现错误
只有运算符重载时,函数正常运行
这个错误信息表明在你的代码中调用了一个名为Integer的构造函数,但传递的参数类型不匹配。更具体地说,它指出没有一个与Integer类的构造函数的参数匹配。
这段代码存在几个问题,我帮你逐个指出并进行修正。
1.类名与构造函数名不一致
在类定义中,类名为 Integerf,但构造函数的名称为 Integer,这是不一致的。应该将类名改为 Integer,以与构造函数名称相一致。
2.类定义中的 private 关键字
在类定义中,private 后面缺少了一个冒号(:),应该加上冒号,否则会导致语法错误。
3.构造函数的参数类型错误
在类定义中,构造函数应该使用 Integer(int num) 的形式,而不是 Integer(Integer &p) 的形式。因为构造函数是用来初始化对象的,而 Integer &p 不是一个合法的对象类型。应该使用 int 类型作为参数类型。
4.运算符重载函数的定义错误
在定义 operator+ 函数时,应该将函数体中的多余的 { 删除,并在开头添加 Integer 类型。并且,在函数名和参数列表之间缺少了一个空格,应该添加上去。
-
修改后的代码如下:
#include <iostream>
using namespace std;
class Integer {
private:
int num;
public:
Integer(int num): num(num) {}
Integer(const Integer &p) { num = p.num / 2; }
void show() { cout << num << endl; }
friend Integer operator+(const Integer &il, const Integer &i2);
};
Integer operator+(const Integer &il, const Integer &i2) {
return Integer(il.num + i2.num);
}
int main(int argc, char *argv[]) {
Integer a(30);
Integer b(40);
Integer c(a);
c.show();
return 0;
}
再试一下