2015-10-11 48 views
-1

我遇到了運算符超載的問題< <運算符。我試圖找到一個答案,但似乎大多數人沒有實施覆蓋。我只是在學習C++,但我認爲這可能是一個範圍問題。我試圖打印出一個有理數(分數和整數)類,它有兩個分子和分母成員。錯誤C2679:二進制'<<':沒有發現運算符需要'RatNum'類型的右側操作數(或者沒有可接受的轉換)

頭文件:

#ifndef RATMATH_H 
#define RATMATH_H 

using namespace std; 

class RatMath 
{ 

public: 
    RatMath(void); 

    virtual ~RatMath(); 

    friend ostream& operator<<(ostream &output, RatNum &resultObj); 

}; 
#endif 
在RatMath類

ostream& operator<<(ostream &output, RatNum &resultNum) 
{ 
    int topNum = resultNum.getTopNum(); 
    int botNum = resultNum.getBotNum(); 

    output << topNum << "/" << botNum; 
    return output; 
} 

,然後將其從int主(呼叫),在GUI類(其未在頭部聲明 - 不是知道這是一個問題,但它工作正常的前):

RatNum testObj = RatNum(1, 3); 
cout << testObj; 

我試圖把在GUI CL倍率權屁股,看看它是否是一個範圍問題,但我不知道在哪裏把'朋友'聲明,因爲GUI類沒有定義在標題中。無論如何,它不起作用。有任何想法嗎?

+1

RatMath類中的''是什麼意思? –

+0

使成員函數靜態 – OMGtechy

+0

@NeilKirk只是意味着過載實現函數位於名爲RatMath的類中。 –

回答

0

friend ostream& operator<<(ostream &output, const RatNum &resultObj); 

朋友的聲明應該放在(首)RatNum cla ss,不在RatMath類的(頭部)。

+0

這是問題所在,重載根本不在對象類中。謝謝! –

+0

@AngelaKay你是最受歡迎的:) –

0

你的函數有錯誤的類型:

friend ostream& operator<<(ostream &output, RatNum &resultObj);

應該是:

friend ostream& operator<<(ostream &output, **const** RatNum &resultObj);

+3

雖然它應該是const,*假設提供的代碼示例是正確的*,那不是錯誤的原因。 –

+0

沒有工作:「該對象具有與成員函數'RatNum :: getTopNum'對象不兼容的類型限定符:const RatNum」。 –

+0

@AngelaKay然後你的'getTopNum'函數需要是const的。 –

相關問題