我无法让我的家庭作业正常工作。我已经超载了我的'=='运算符,但我仍然遇到此错误。不确定为什么它被抛出或如何解决它。任何帮助将不胜感激。
这是我的算法:
/* Performs a recursive binary search on the given array. It returns
* the index of the found value, -1 otherwise.
*/
template <typename T, typename V>
int binarySearch(T* list[], const V& searchValue,
const int firstIndex, const int lastIndex)
{
if (firstIndex <= lastIndex)
{
int mid = (firstIndex + lastIndex) / 2; //mid point of list.
if (searchValue == *list[mid])
return mid; // found value.
else if (searchValue < *list[mid])
return binarySearch(list, firstIndex, mid - 1, searchValue);
else
return binarySearch(list, mid + 1, lastIndex, searchValue);
}
return -1; //failed to find value
}
调试器说main中的这一行是错误发生的地方:
// Search the person array.
cout << "Searching people array for person with name = 'Mickey Mouse': "
<< (binarySearch(person, "Mickey Mouse", 0, 7) != -1? "found it." : "did not find it.")
<< endl;
这是我的person类头文件,显示了重载的运算符:
#ifndef PERSON_H
#define PERSON_H
#include <string>
#include <iostream>
using namespace std;
namespace P03 {
class Person {...}; // end Person
/* Displays a Person to the screen.
* Calls the toString() method.
*/
ostream& operator <<(ostream& out, const Person& person)
{
return out << person.toString();
}
/* The following relational operators compare two instances of the
* Person class. The comparison is made on the compound value of:
* <lastName><space><firstName>
*/
bool operator ==(const Person& lhs, const Person& rhs)
{
return lhs.getName() == rhs.getName();
}
/*other operators*/
...
} // end namespace P03
#endif
不确定是否需要更多代码。如果需要,我会更新。
答案 0 :(得分:3)
致电时
binarySearch(person, "Mickey Mouse", 0, 7)
在binarySearch
,T
person
是指针数组的类型,V
是const char*
。然后你身体
searchValue == *list[mid]
这是const char*& == *person[x]
,这就是您收到错误的原因,因为没有operator==(const char*, X)
X
是*person[x]
的任何内容。
答案 1 :(得分:0)
您的模板类适用于T
和V
类型。在binarySearch
函数中,您可以获取类型T
的列表和类型为V
的搜索值。然后你比较它们:if (searchValue == *list[mid])
。这就是错误所在,因为您可能没有为类==
实现T
运算符,该运算符接受V
类型的参数。
问题可以追溯到cout
,您将Person
作为T
类型传入,const char*
作为类型V
传递。您的Person
类“==
运算符仅接受类型为Person
的右侧操作数。换句话说,在a == b
表达式中,b
必须是Person
类型。
答案 2 :(得分:0)
行if (searchValue == *list[mid])
比较const V&amp;类型。用T.
V是一个C字符串(char*
),假设该人是Person*
T的数组,则Person
。您提供了const Person&, const Person&
比较运算符,但代码需要const char*&, const Person
比较运算符。提供这样的运算符,或者从binarySearch(person, "Mickey Mouse", 0, 7)
表达式中的字符串创建Person。