我正在玩模板,并尝试了以下,但得到'不能转换'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;
}
您的>
操作符应该返回bool
,而不是MyClass
引用。
您的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;
}
语法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
}
您的>
运算符需要返回bool
(或可以自动转换为bool
的内容,例如int
),而不是MyClass&
。
您需要从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
也放在声明上
operator>应该声明/定义为返回bool值,而不是MyClass&
operator >
应该像这样返回bool值而不是MyClass &
:
bool MyClass::operator>(MyClass &rhs)
{
return m_iSize > rhs.m_iSize;
}
试试这个
bool MyClass::operator>(MyClass &rhs)
{
return m_iSize > rhs.m_iSize ;
}
MyClass
的operator>
应该简单地定义类的一个实例是否大于另一个,并且它应该返回类型bool
,而不是类型MyClass&
。修改它,使其看起来像这样:
bool MyClass::operator>(const MyClass &rhs) const
{
return m_iSize > rhs.m_iSize;
}
这将正确地测试当前MyClass
实例是否大于>
操作符右侧的MyClass
实例。