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];
}

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

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