模板编程中的"Cannot convert 'MyClass' to 'bool'"错误
"Cannot convert 'MyClass' to 'bool'" Error in Template Programming
我正在玩模板,并尝试了以下,但得到'不能转换'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
实例。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 地图'Cannot convert from _Ty2 to T*'错误
- 如何修复 cpp 中的"undefined reference to"错误,当调用刚性车身树中的函数时,如 doKinematics、CreateKinematicCache
- 如何修复 C++ 中的"no matching fuction for call to:"错误
- 在VS代码中使用全局变量时出现"undefined reference to"错误
- C++'Undefined reference to'错误,尽管包含路径中的头文件中存在函数定义
- 为什么我的复制构造函数出现"undefined reference to"错误?
- 无法解决"Undefined reference to ..."错误
- 我收到"no mathing function for call to "错误。给我解决方案
- 几个"undefined reference to"错误
- g++ 的一个奇怪的'undefined reference to'错误
- "is not a member of"和"no matching function for call to"错误
- 将静态 C 库与C++代码链接时出现"undefined reference to"错误
- 头文件中的命名空间出现问题,"undefined reference to"错误?
- G++:"Undefined Reference to"错误
- C++ "undefined reference to"错误
- "Undefined reference to" 错误/静态成员变量 C++/Qt
- 编译器构造 - 当我编译C++代码时"undefined reference to"错误,但原始 makefile 代码编译
- 在C++中使用继承对象时"no matching function for call to"错误