在友元函数中使用成员函数
Using Member Functions in a Friend Function
我正在尝试使用...
int Fraction::GCD(int a, int b)
{
for (;;)
{
if (a == 0)
return b;
b %= a;
if (b == 0)
return a;
a %= b;
}
}
int Fraction::LCD(int a, int b)
{
return (abs(a * b) / GCD(a, b));
}
。它位于我的分数班的私人空间。
我收到编译器错误"'LCD'未在此范围内声明"时尝试在我的重载朋友运算符中调用它......
Fraction operator + (const Fraction &x, const Fraction &y)
{
Fraction temp;
static int lcd = LCD(x.denom, y.denom); // <--
if (lcd / x.denom != 1)
temp.num = x.num * (lcd / x.denom);
if (lcd / y.denom != 1)
temp.num += y.num * (lcd / y.denom);
temp.denom = LCD(x.denom, y.denom);
return temp;
}
你的两个函数都被声明为"普通"(即非静态)成员函数:
class Fraction {
int GCD(int a, int b);
int GCD(int a, int b);
...
public:
...
};
如果将运算符声明为友元,则可以从此运算符访问它们,但应使用对象调用它们:
temp.denom = temp.LCD(x.denom, y.denom);
如果你在没有对象的情况下调用它们,就像你一样:
temp.denom = LCD(x.denom, y.denom);
编译器找不到:没有任何东西告诉他你正在从成员函数说话
幸运的是,看起来您的函数GCD()
和LCD()
实际上完全独立于 Fraction 对象的状态:他们只取决于他们的论点。 因此,您可以/应该将它们声明为静态。
class Fraction {
static int GCD(int a, int b);
static int GCD(int a, int b);
...
};
然后,您可以在不指定对象的情况下调用它们:
temp.denom = Fraction::LCD(x.denom, y.denom);
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针