【问题标题】:IntelliSense and friend functions false error(VS2010)IntelliSense 和友元函数错误错误(VS2010)
【发布时间】:2012-08-31 04:44:39
【问题描述】:

这并不是什么大问题,但我想知道在类中的友元函数方面,IntelliSense 是否搞砸了?

我有一个使用 ostream 和 istream (>) 的重载运算符的类,并且我在我的类中将它们标记为友元函数。所以理论上他们应该可以访问类的私有成员。该程序编译并运行良好,没有错误 - 但随着我继续编写代码,IntelliSense 不断报告成员函数无法访问这些函数。它仍然可以编译,但我想知道这是否是 IntelliSense 的问题或我的问题,而我碰巧很幸运它正在运行?

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

【问题讨论】:

  • 类中是否也有实际的流运算符函数,而不仅仅是friend 声明?
  • 另外,您应该检查输入运算符,因为您忘记了斜线。
  • 不,friend 声明在类内部,但实际函数在类外部(但在同一个头文件和命名空间中)。

标签: c++ operator-overloading intellisense


【解决方案1】:

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

除此之外,还有一些附加信息。 VisualStudio AFAIK 的 IntelliSense 功能实际上是由与 Microsoft 不同的公司开发的,因此编译器和 IntelliSense 有时可能对什么是正确的和什么不是有不同的看法。只是说。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多