“无法将'MyClass'转换为'bool'”模板编程出错

时间:2011-10-05 18:15:20

标签: c++ templates

我正在玩模板并试过以下但是'无法将'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; 
}

9 个答案:

答案 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实例。