2011-10-05 51 views
1

我正在玩弄模板,並嘗試了以下方法,但是'無法將'MyClass'轉換爲'bool'錯誤?「無法將'MyClass'轉換爲'bool'」模板編程中的錯誤

#include "Unit2.h" 
using namespace std; 

template <class T> 
T GetMax (T a, T b) { 
    T result; 
    result = (a > b) ? a : b; 
    return (result); 
} 

int main() { 
    MyClass k1(10, "A"); 
    MyClass k2(50, "B"); 
    MyClass k3(0,""); 
    k3 = GetMax<MyClass>(k1,k2); 

    cout << k3.GetName() << endl; 

    return 0; 
} 
//--------------------------------------------------------------------------- 

我已經定義了>運營商MyClass的如下:

MyClass& MyClass::operator>(MyClass &rhs) 
{ 
    MyClass& rkReturn = (m_iSize > rhs.m_iSize) ? *this : rhs; 
    return rkReturn; 
} 
+0

問得好除了冠軍。你顯示錯誤信息和所有相關的代碼!甚至有一個問號! –

+0

@Joe:你有答案嗎?它是哪一個? –

回答

6

>運營商應該返回bool,而不是一個MyClass參考。

+0

運算符>太... – sehe

1

>運營商需要返回bool(或一些可以自動轉換爲bool,如int),而不是一個MyClass&

3

您的operator>返回MyClass&而不是bool。通過在條件運算符中使用它,編譯器試圖將返回的MyClass強制爲bool

變化

MyClass& MyClass::operator>(MyClass &rhs) 
{ 
    MyClass& rkReturn = (m_iSize > rhs.m_iSize) ? *this : rhs; 
    return rkReturn; 
} 

bool MyClass::operator>(const MyClass &rhs) const 
{ 
    return m_iSize > rhs.m_iSize; 
} 
+0

當你正在糾正'operator>'時,注意它應該是一個'const'函數。 –

+0

@MooingDuck完成。 –

0

operator>MyClass應該簡單地定義類的一個實例是否比其他的大,它應該返回類型bool,不會打字MyClass&。修改它,使它看起來像下面這樣:

bool MyClass::operator>(const MyClass &rhs) const 
{ 
    return m_iSize > rhs.m_iSize; 
} 

現在,這將正確測試的MyClass當前實例是否比。在這種表達中的>操作的右手側MyClass實例較大。

2

語法x ? y : z要求x可轉換爲bool類型。你給它的表達(a > b),它呼籲您的運營商MyClass& MyClass::operator>(MyClass &rhs),它通過引用返回MyClass。編譯器無法將此引用轉換爲bool,並且感到困惑。 MyClass::operator>(MyClass &rhs)應返回bool

bool MyClass::operator>(MyClass &rhs) const //also, it should be a const function 
{ 
    return m_iSize > rhs.m_iSize 
} 
1

您需要從operator>返回bool

那麼試試這個:

bool MyClass::operator>(const MyClass &rhs) 
{ 
    return m_iSize > rhs.m_iSize; 
} 

這將是更好,如果你讓這個const功能,通過將關鍵詞在功能上的右側,如下圖所示:

bool MyClass::operator>(const MyClass &rhs) const 
{          // ^^^^^ this makes the function const 
    return m_iSize > rhs.m_iSize; 
} 

在宣言上也寫const

1

operator>應該聲明/定義爲返回bool,而不是MyClass &。

+0

但是,這不是模板的力量,例如..T結果; 結果=(a> b)? a:b; 結果是類型T這是MyClass,爲什麼我不能返回? – Yos

+0

一般來說,是的,方法的返回類型可以是模板參數。但考慮「大於」的語義...任何其他結果類型比布爾將是奇怪的。 – Dabbler

+1

@JoeSaddigh:在百萬算符'(a> b)? a:b;'(a> b)'的結果應該是'bool'而不是'MyClass',因此你的'>'運算符應該返回一個'bool'。 –

1

operator >應該返回布爾而不是MyClass &這樣的:

bool MyClass::operator>(MyClass &rhs) 
{ 
    return m_iSize > rhs.m_iSize; 
} 
+0

對不起......有這麼多帖子進入這個帖子,我偶然編輯錯誤的帖子。 – Jason

+0

謝謝大家的留言!我明白你的意思是我有一段時間瘋狂。我對所有的Ts和東西感到困惑......另外,我複製了賦值運算符的大部分語法,該運算符自然返回一個ref。 :-) – Yos

1

儘管試試這個

bool MyClass::operator>(MyClass &rhs) 
{ 
    return m_iSize > rhs.m_iSize ; 
} 
相關問題