_lizi_ 2019-04-17 20:16 采纳率: 16.7%
浏览 487

C++ 普通的非成员函数可不可以返回类对象?

定义一个Rational 类,然后写一个返回值为Rational的非成员函数,编译器报错:无法重载仅按返回类型区分的函数


Rational adder_substractor(string str);
Rational adder_substractor(string str)
{
    int num = str.length();
    //提取运算符
    char *operators = new char[num];
    int operatorNum = 0;//运算符个数
    for (int i = 0; i < num; i++)
    {
        if (str[i] == '+' || str[i] == '-')
        {
            operators[operatorNum] = str[i];
            operatorNum++;
        }
    }
    //提取字符串中的数字
    int numberNum = (operatorNum + 1) * 2;//分子和分母个数的总和
    int *number = new int[numberNum];
    for (int i = 0; i < numberNum; i++)
        number[i] = 0;
    int j = 0;
    for (int i = 0; i < num; i++)
    {
        if (str[i] >= '0'&&str[i] <= '9')
        {
            number[j] *= 10;
            number[j] = number[j] + str[i] - '0';
        }
        else if (str[i] == '-' || str[i] == '+' || str[i] == '/')
            j++;
    }
    //创建Rational对象
    Rational *rationals = new Rational[numberNum / 2];
    int rationalNum = 0;
    for (int i = 0; i < numberNum; i += 2)
    {
        rationals[rationalNum] = Rational(number[i], number[i + 1]);
        rationalNum++;
    }
    //执行运算
    for (int i = 0; i < operatorNum; i++)
    {
        if (operators[i] == '+')
        {
            rationals[i + 1] = rationals[i] + rationals[i + 1];
        }
        else if (operators[i] == '-')
        {
            rationals[i + 1] = rationals[i] - rationals[i + 1];
        }
    }
    return rationals[rationalNum - 1];
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-04-18 00:08
    关注

    相同函数名,不同参数(个数,或者类型)构成重载,返回值类型不同不能构成重载。

    你只贴出了一部分代码,这个你要检查下,别的地方有没有又定义了一个 adder_substractor 的函数

    评论

报告相同问题?

悬赏问题

  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站