我创建了一个包含一个字符和一个字符串的stuct
struct M2E
{ char english;
string morse;}
通过使用给出的代码,我创建了一个M2E的二叉树,它是bintree 但我想按字符串莫尔斯顺序对这些M2E进行排序(“*”小于“ - ”) 所以我在struct M2E中做了一个重载器
bool operator == (M2E& other) const
{
return morse.compare(other.morse);
}
但是我在编译时会不断给出以下错误消息
no match for "operator ==" in ((binNode<M2E>*)this)->binNode<M2E>::nodeData == dataItem
note:candidates are :bool M2E::operator==(M2E&) const
我用于二进制树的代码是bintree.h:
template <typename dataType> class bintree
{
private:
binNode<dataType> *root;
int numItems;
void insert(const dataType& newData)
{
// insert the newData into the tree
if (root == NULL)
{
root = new binNode<dataType>(newData);
}
else
{
root->insert(root, newData);
}
numItems++;
}
用于二进制节点的代码是binnode.h:
template <typename dataType> class binNode
{
private:
// private data ====================================
dataType nodeData;
binNode<dataType> *left, *right;
void insert(binNode<dataType>* &root, const dataType& dataItem)
{
if (nodeData == dataItem)
{
throw std::invalid_argument("dataItem already in tree");
}
if (dataItem < nodeData)
{
if (left == NULL)
{
left = new binNode(dataItem);
}
else
{
left->insert(left, dataItem);
}
}
else
{
if (right == NULL)
{
right = new binNode(dataItem);
}
else
{
right->insert(right, dataItem);
}
}
rebalance(root);
}
thx for help
答案 0 :(得分:1)
问题是您在const datatype dataItem
中使用了insert()
,但operator==
采用了非常量M2E
参数。
您需要将operator==
参数类型指定为const
:
bool operator == (const M2E& other) const {
//...
}
请记住const
是契约:函数承诺不会更改其参数的值。因此insert()
做出了这个承诺,但operator==
没有,所以insert()
无法让该运算符按原样调用它。通过将const
添加到operator==
的参数类型,您可以使operator==
做出相同的承诺,因此insert()
可以将其称为