我正在玩模板并试过以下但是'无法将'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;
}
//---------------------------------------------------------------------------
我已经定义了一个&gt; myclass的运算符如下:
MyClass& MyClass::operator>(MyClass &rhs)
{
MyClass& rkReturn = ( m_iSize > rhs.m_iSize ) ? *this : rhs;
return rkReturn;
}
答案 0 :(得分:6)
您的>
运算符应该返回bool
,而不是MyClass
引用。
答案 1 :(得分: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;
}
答案 2 :(得分: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
}
答案 3 :(得分:1)
您的>
运营商需要返回bool
(或可以自动转换为bool
的内容,例如int
),而不是{{1} }}
答案 4 :(得分:1)
您需要从bool
返回operator>
。
所以试试这个:
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}}放在声明上。
答案 5 :(得分:1)
运营商GT;应该声明/定义为返回bool,而不是MyClass&amp;。
答案 6 :(得分:1)
operator >
应该返回bool而不是MyClass &
这样:
bool MyClass::operator>(MyClass &rhs)
{
return m_iSize > rhs.m_iSize;
}
答案 7 :(得分:1)
试试这个
bool MyClass::operator>(MyClass &rhs)
{
return m_iSize > rhs.m_iSize ;
}
答案 8 :(得分:0)
operator>
的{{1}}应该只定义该类的一个实例是否大于另一个实例,它应该返回类型MyClass
,而不是类型bool
。修改它,使其如下所示:
MyClass&
现在,这将正确测试bool MyClass::operator>(const MyClass &rhs) const
{
return m_iSize > rhs.m_iSize;
}
的当前实例是否大于MyClass
运算符右侧的MyClass
实例。