首页 > 解决方案 > 如何定义一些可以从(+)运算符的运算符重载范围内访问的函数?

问题描述

我通过使用 C++ 中的运算符重载概念创建了一个代码,通过重载 +(plus) 和 <<(Insertion) 运算符来添加两个有理数,但我无法从运算符重载的范围内访问一个函数+ 运算符。如何从 operator+ 重载的范围内访问 LCM() 函数?

我尝试使用朋友函数从 operator+ 重载函数的范围内访问我的 LCM() 函数,但它不起作用!

#include <iostream>
using namespace std;

class Rational {

private:
    int num, den;

public:
    int getnum()
    {
        return this->num;
    }

    int getden()
    {
        return this->den;
    }

    Rational(int num = 0, int den = 0)
    {
        this->num = num;
        this->den = den;
    }
    int LCM(int a, int b);
    friend ostream& operator<<(ostream& out, Rational& r);
    friend Rational operator+(Rational x, Rational y);
};

int Rational::LCM(int a, int b)
{

    int i = a > b ? a : b;
    for (i; i <= a * b; i++) {
        if (i % a == 0 && i % b == 0) {

            break;
        }
    }
    return i;
}

ostream& operator<<(ostream& out, Rational& r)
{

    out << r.getnum() << "/" << r.getden();

    return out;
}

Rational operator+(Rational x, Rational y)
{

    Rational temp;
    int temp1;
    int div;
    temp1 = LCM(x.den, y.den);

    temp.num = (int(temp1 / x.den) * x.num) + (int(temp1 / y.den) * y.num);
    temp.den = temp1;

    return temp;
}

int main()
{

    Rational r1(3, 2);
    Rational r2(9, 4);
    Rational r3;
    r3 = r1 + r2;
    cout << r3;

    return 0;
}

我得到了错误:

错误:未在此范围内声明“LCM”

标签: c++operator-overloadingc++14operator-keyword

解决方案


我想说这int Rational::LCM(int a,int b)与类没有任何关系,Rational应该是一个实用函数(非成员函数),然后你就可以在任何地方使用它


推荐阅读