比安卡·幽兰黛尔·阿塔吉娜 2023-02-20 17:24 采纳率: 100%
浏览 51
已结题

(C++)运算符重载和拷贝函数

当拷贝函数和运算符重载同时出现时,会出现错误
只有运算符重载时,函数正常运行

img


只有拷贝函数时,函数正常运行

img


当两个同时存在时,出现错误,问一下,这是什么错误

img

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-02-20 17:34
    关注

    这个错误信息表明在你的代码中调用了一个名为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;
    }
    
    
    

    再试一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月21日
  • 创建了问题 2月20日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备