如果此代码中的任何内容看起来很奇怪(如指针的不合逻辑用法),那是因为它是一项任务,所以不需要让我知道那里绝对没有理由在这种情况下使用指针。感谢您的帮助。
代码对我有用,除了一件事,insertNode函数使用重载<来自宠物课。该运算符应该使用string.compare()函数比较字符串,并根据结果值返回true或false。但是根本没有完成排序,输入文件只是从头到尾正常读取。
问题出现在下面的代码段中
bool Pet::operator <(Pet &right)
{
if (name.compare(right.name) < 0)
return true;
else if (name.compare(right.name) > 0)
return false;
}
在我看来,这没有任何问题会导致任何改变。我还没有能够测试运营商是否正确(&gt; 0和&lt; 0),但我更担心它什么都不做。
答案 0 :(得分:2)
当字符串相等时,您的比较函数不会处理这种情况。
bool Pet::operator <(Pet &right)
{
if (name.compare(right.name) < 0)
return true;
else if (name.compare(right.name) > 0)
return false;
}
如果 string.compare
小于它的参数,则返回负值,当它们相等时返回0,当它更大时返回正值。当它返回0时你不处理这种情况,因此它会脱离函数的末尾,这是未定义的行为。
将else if
更改为:
else if (name.compare(right.name) >= 0)
@Benjamin是对的,你的整个功能可以简化为:
bool Pet::operator <(Pet &right)
{
return name.compare(right.name) < 0
}
在回答问题时,我总是以某种方式监督这些事情......