比安卡·幽兰黛尔·阿塔吉娜 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日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。