我有课:
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无法访问。有什么想法吗?
答案 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)