C++ 如何修复“*私有变量*是“*类名*的私有成员”错误
我正在编写使用friend函数的代码,但我不确定为什么会出现函数sum中的私有成员错误,因为我在头文件中将函数声明为friend 头文件:C++ 如何修复“*私有变量*是“*类名*的私有成员”错误,c++,friend-function,C++,Friend Function,我正在编写使用friend函数的代码,但我不确定为什么会出现函数sum中的私有成员错误,因为我在头文件中将函数声明为friend 头文件: #include <iostream> class rational { public: // ToDo: Constructor that takes int numerator and int denominator rational (int numerator = 0, int denominator = 1);
#include <iostream>
class rational
{
public:
// ToDo: Constructor that takes int numerator and int denominator
rational (int numerator = 0, int denominator = 1);
// ToDo: Member function to write a rational as n/d
void set (int set_numerator, int set_denominator);
// ToDo: declare an accessor function to get the numerator
int getNumerator () const;
// ToDo: declare an accessor function to get the denominator
int getDenominator () const;
// ToDo: declare a function called Sum that takes two rational objects
// sets the current object to the sum of the given objects using the
// formula: a/b + c/d = ( a*d + b*c)/(b*d)
friend rational sum (const rational& r1, const rational& r2);
void output (std::ostream& out);
// member function to display the object
void input (std::istream& in);
private:
int numerator;
int denominator;
};
源文件:
#include <iostream>
using namespace std;
// takes two rational objects and uses the formula a/b + c/d = ( a*d + b*c)/(b*d) to change the numerator and denominator
rational sum (rational r1, rational r2)
{
// formula: a/b + c/d = ( a*d + b*c)/(b*d)
cout << endl;
numerator = ((r2.denominator * r1.numerator) + (r1.denominator * r2.numerator));
denominator = (r1.denominator * r2.denominator);
}
有理和有理r1,有理r2是一个全新的函数,与接受两个有理数并返回一个有理数的rational类无关
实现所需类方法的正确方法是rational::sum const rational&r1,const rational&r2
总体评论:对Rational类使用大写的第一个字母您想要这样的东西:
rational sum (const rational& r1, const rational& r2)
{
// formula: a/b + c/d = ( a*d + b*c)/(b*d)
int numerator = ((r2.denominator * r1.numerator) + (r1.denominator * r2.numerator));
int denominator = (r1.denominator * r2.denominator);
return rational(numerator, denominator);
}
rational sum const rational&r1,const rational&r2;和rational sum rational r1,rational r2是两个不同的函数,它们的参数声明不匹配如果你有getter函数,比如getNumerator和getDenominator,为什么你需要让sum函数成为朋友呢?朋友函数通常会使事情复杂化,往往会使代码混乱更难维护。当然也有例外,输入和输出操作符重载通常是其中之一,但如果可以的话,通常尽量避免它们。我认为您的声明需要使用rational rational::sum rational r1,rational R2声明的目的是使用友元声明,因此全局函数应该是rational的sum const rational&r1,const rational&r2 insteadGet在我将未声明标识符的分子更改为建议的实现时使用它时出错。rational sum const rational&r1,const rational&r2@user10793479当然,请注意我答案中的额外整数