2012-08-31 73 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的智能感知功能實際上是由不同於微軟的公司開發的,所以編譯器和智能感知有時可能對什麼是正確的和什麼是不正確的有不同的意見。只是說。 :)