我正在努力将我的对象与另一个相同类型的对象进行比较。
Entry<string, string>* name = new Entry<string, string>(names[9], paths[9]);
Entry<string, string>* name2 = new Entry<string, string>(names[9], paths[9]);
bool isSame = name == name2;
这总是错误的。
在我的实施中,我尝试过一些事情,但没有运气。
template<class KeyType, class ItemType>
bool Entry<KeyType, ItemType>::operator==(Entry<KeyType, ItemType>* rightHandItem)
{
KeyType key = rightHandItem->getKey();
return (searchKey == key);
}
template<class KeyType, class ItemType>
bool Entry<KeyType, ItemType>::operator>(Entry<KeyType, ItemType>* rightHandItem)
{
KeyType key = rightHandItem->getKey();
return (searchKey > key);
}
template<class KeyType, class ItemType>
bool Entry<KeyType, ItemType>::operator<(Entry<KeyType, ItemType>* rightHandItem)
{
KeyType key = rightHandItem->getKey();
return (searchKey < key);
}
这是我的类头文件
#pragma once
template<class KeyType, class ItemType>
class Entry
{
public:
Entry();
Entry(KeyType& searchKey);
Entry(KeyType& searchKey, ItemType newEntry);
~Entry();
ItemType getItem() const;
KeyType getKey() const;
void setItem(const ItemType& newEntry);
bool operator==(const Entry<KeyType, ItemType>& rightHandItem) const;
bool operator>(const Entry<KeyType, ItemType>& rightHandItem) const;
bool operator<(const Entry<KeyType, ItemType>& rightHandItem) const;
bool operator==(Entry<KeyType, ItemType>* rightHandItem);
bool operator>(Entry<KeyType, ItemType>* rightHandItem);
bool operator<(Entry<KeyType, ItemType>* rightHandItem);
private:
ItemType Item;
KeyType searchKey;
protected:
void setKey(const KeyType& searchKey);
};
#include "Entry.cpp"
我能让它工作的唯一方法是将条目声明为对象而不是指针。
我认为这个问题是一个快速搜索,但我一直无法找到重复。如果以前曾经问过,请告诉我。
我如何比较两个指针?
答案 0 :(得分:0)
Entry<string, string>* name = new Entry<string, string>(names[9], paths[9]); Entry<string, string>* name2 = new Entry<string, string>(names[9], paths[9]); bool isSame = name == name2;
这总是错误的。
总是false
,因为您正在比较两个不同对象的地址。实际上一般情况下除非你对它进行修改,否则你无法用指针做什么。如果你想调用Entry::operator==
,你需要取消引用指针,如:
bool isSame = *name == *name2;
是的,问题出现了,为什么你首先使用指针?只需使用普通对象就可以解决问题:
auto name = Entry<string, string>(names[9], paths[9]);
auto name2 = Entry<string, string>(names[9], paths[9]);
bool isSame = name == name2;
如果您提供Entry::operator==(Entry)