大一初学者!请教哈,在重载类的运算符内的声明个对象出现异常

大一菜鸟求助!请问哈,在重载类的运算符内的声明个对象出现错误
本帖最后由 u012851419 于 2014-05-24 21:55:22 编辑
麻烦看下
    fraction operator +(fraction& n) //加法重载
    {
        fraction m;//就是这里错了
        if(b==n.b)
        {
            m.b=n.b;
            m.a=a+n.a;
        }
        else
        {
            m.b=b*n.b;
            m.a=a*n.b+n.a*b;
        }
        return (m);
    }

就是这里,我声明一个fraction 的m,错误是error: no matching function for call to 'fraction::fraction()'|  
还有这个 
        for(i; s[i]!='\0'; i++)
            b=b*10+s[i];

有个warning: statement has no effect [-Wunused-value]|
------解决方案--------------------
引用:
Quote: 引用:

类定义添加一句 fraction()=default;
添加这句是什么意思
意思实说你要使用默认的构造函数,因为你自己声明自己的构造函数,编译器就不会为你合成默认的一个无参数构造函数,这样写就告诉编译器继续为我合成这个构造函数。因为你的fraction m意为你要为fraction类实例化一个成员,而这个成员你没有给他参数让他符合你定义的构造函数,而编译器又没有为你合成这样一个没有参数的默认构造函数,所以会出错。
两种方法,一种是我写的这种,告诉编译器自己合成一个。再一种就是你自己显示地写一个没有参数的构造函数。