在重载运算符时无法访问类成员

时间:2016-02-10 18:49:25

标签: c++

我有课:

if(this.positions[0].x = this.positions[i].x)

操作员超载:

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

Visual Studio告诉我f.num和f.den无法访问。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

friend istream& ::operator>>(istream& cin, Fraction& f);

add :: before运算符,它标记位于全局命名空间

的函数运算符>>()

UPD:另一个解决方案是在类和函数之前添加函数和类的预定义:

class Fraction;
std::istream& operator>>(std::istream& cin, Fraction& f);

当然不要忘记接口(.h / .hpp)需要std ::前缀。但是使用命名空间std;如果仅用于实现(.cpp)