2012-08-31 65 views
1

不是一个真正的大问题,但我想知道是否智能感知搞砸了,当涉及到类中的朋友功能?智能感知和朋友功能虚假错误(VS2010)

我有一个类使用ostream和istream的重载操作符(< <,>>),并且我把它们标记为我班内的朋友函数。所以理论上他们应该可以访问班级的私人成员。该程序编译和运行良好,没有错误 - 但由于我继续编写代码,智能感知不断报告成员函数不可访问的功能。它仍然编译,但我想知道这是智能感知问题还是我的一端,我只是碰巧幸运的是它运行了吗?

friend std::ostream & operator <<(std::ostream &, const Rational &); 
    friend std::istream & operator >>(std::istream &, Rational &); 

    std::ostream & operator <<(std::ostream & outs, const Rational & source) 
    { 
     outs << source.itsNum << '/' << source.itsDen; 
     return outs; 
    } 

    std::istream & operator >>(std::istream & ins, Rational & target) 
    { 
     ins >> target.itsNum >> target.itsDen; 
     return ins; 
    } 
+0

实际的流操作符是否也在类中,而不仅仅是'friend'声明? –

+0

另外,你应该检查输入的操作符,因为你忘记了斜线。 –

+0

不,朋友声明在类内,但实际函数在类之外(但在同一个头文件和命名空间中)。 –

回答

2

你的代码没有问题。我敢打赌,智能感知混乱了。尝试删除项目的IntelliSense数据库,以查看错误是否会消失(IntelliSense数据库将在重新启动Visual Studio后自行重建)。数据库应位于.sln文件旁边,并且(至少对于Visual Studio 2008)的扩展名为.ncb

除此之外,一些额外的信息。 VisualStudio AFAIK的智能感知功能实际上是由不同于微软的公司开发的,所以编译器和智能感知有时可能对什么是正确的和什么是不正确的有不同的意见。只是说。 :)