重载运算符时无法访问的类成员
Inaccessible class members while overloading operators
我有这样的类:
class Fraction{
friend Fraction operator+(Fraction& f1, Fraction& f2);
friend Fraction operator-(Fraction& f1, Fraction& f2);
friend Fraction operator*(Fraction& f1, Fraction& f2);
friend Fraction operator/(Fraction& f1, Fraction& f2);
friend istream& operator>>(istream& cin, Fraction& f);
private:
int num;
int den;
};
和运算符过载:
istream& operator>>(istream& cin, Fraction& f)
{
char ch;
cin >> f.num >> ch >> f.den;
return cin;
}
Visual Studio告诉我f.num和f.den无法访问。知道为什么吗?
friend istream& ::operator>>(istream& cin, Fraction& f);
add :: 在运算符之前,它标记放置在全局命名空间的函数运算符>>()
UPD:另一种解决方案是在类和函数之前添加函数和类的预定义:
class Fraction;
std::istream& operator>>(std::istream& cin, Fraction& f);
当然,不要忘记 std:: 前缀是接口 (.h/.hpp) 所必需的。但是使用命名空间标准;如果仅用于实施 (.cpp)
相关文章:
- 这是关于成员访问规则的正确摘要吗
- 为什么我在空指针错误(链表)中获取成员访问权限
- 成员访问是否在空指针上定义C++?
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- 为什么c++允许成员函数定义中实例的私有成员访问
- C/C++ 包含点的宏参数(成员访问运算符)
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 内部类私有成员访问和封闭的友好性
- 通过 C++ 中的另一个结构成员访问结构
- 具体化 PRVALUES 成员访问的 decltype 行为不正确
- 常量表达式中的静态成员访问
- XVALUE来自类成员访问表达式
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- 如何访问模板参数的成员?“成员访问不完整的类型”
- 不明确的可变参数类成员访问
- C 受保护的成员访问
- 将typeID转换为静态成员访问(C )的命名空间