我正在尝试实施房间预订系统。我正在处理的代码是编辑房间类型细节的功能。它将要求用户输入房间ID并将其传递给edit_room()
功能以编辑房间类型详细信息。
这是我的struct
:
struct Node{
ListItemType roomType;
ListItemType id;
Node *next;
Node *prev;
};
Node *head;
Node *tail;
这是编辑房间类型的功能:
void edit_room(int edit)
{
ListItemType roomType, roomType1, roomType2;
if(!isEmpty())
{
bool found = false;
Node* curr = new Node;
curr = head;
while(curr != tail->next)
{
if(edit == curr->id)
{
found = true;
break;
}
curr = curr->next;
}
if(found)
{
cout << "Enter New Room Type Name: " << endl;
cout << " ";
cin >> roomtype1;
getline(cin,roomtype2);
roomtype = roomtype1 + roomtype2;
curr->roomType = roomtype;
cout << endl << "Successfully updated." << endl << endl;
system("pause");
}
else
cout << "Could not update information. " << endl << endl;
}
}
当我尝试编译它时,我收到了一个错误:
'error: no match for 'operator==' in 'edit == curr->List::Node::id'.
这个错误意味着什么,我应该如何解决?
答案 0 :(得分:0)
此错误表示编译器未找到operator = ==将int类型的对象与ListItemType类型的对象进行比较。只是编译器不知道如何比较它们。您没有向我们展示如何定义ListItemType类型,
答案 1 :(得分:0)
您的ListItemType
实施是回答此问题的关键。
如果typedef
不仅仅是int
,那么您需要实施operator ==()
来比较int
与ListItemType
。看起来有点像这样:
bool operator ==(int lhs, ListItemType const& rhs)
{
return lhs == std::stoi(rhs);
}
也许您最好将void edit_room(int edit)
的签名调整为:
void edit_room(ListItemType& item)
您最好只使用std::list<ListItemType>
而不是实现自己的链接列表(这是一个已解决的问题)!
请注意roomType
中的大小写。稍后您将在函数中roomtype
,这将无法编译。