问题描述
我正在使用链接列表来操作排序列表。但是,在我的函数PutUser中,调用另一个函数比较两个用户时出现错误。我不确定该怎么办或如何处理该错误。
这是我的NodeUser结构(为链接列表创建节点):
struct NodeUser {
User user;
NodeUser* nextOnList;
};
然后我有一个函数,该函数应该创建一个新节点并将用户放入列表中
void SortedList::PutUser(User* user) {
NodeUser* newNode; /
NodeUser* prevIoUsPointer;
NodeUser* location;
bool moretoSearch;
location = topOfList;
prevIoUsPointer = NULL;
moretoSearch = (location != NULL);
while (moretoSearch) {
switch (user->comparedTo(location->user)) {
case GREATER:
prevIoUsPointer = location;
location = location->next;
moretoSearch = (location != NULL);
break;
case LESS:
moretoSearch = false;
break;
}
}
newNode = new NodeUser;
newNode->user = user;
if (prevIoUsPointer == NULL) {
newNode->next = topOfList;
topOfList = newNode;
}
else {
newNode->next = location;
prevIoUsPointer->next = newNode;
}
length++;
}
switch (user->comparedTo(location->user))
解决方法
您正在尝试传递User
指针所在的User*
对象。
没有理由将指针中的User
对象 传递到SortedUserType::PutUser()
或User::comparedTo()
中。通过引用将其传递给 :
class User {
public:
...
RelationType comparedTo(const User &aUser) const;
...
};
void SortedUserType::PutUser(const User &user) {
...
while (moreToSearch) {
switch (user.comparedTo(location->user)) {
...
}
...
newNode = new NodeUser;
newNode->user = user;
...
}
,
一个快速解决方案是
RelationType comparedTo(User const &aUser) const;
或至少
switch (user->comparedTo(&location->user))
指针不应过度使用。