【发布时间】:2014-12-09 00:51:13
【问题描述】:
我正在尝试从 BST 中检索一项用于课堂作业的项目。我不允许更改某些提供的代码。讲师在驱动程序中创建了一个检索功能(我无法更改),看起来像这样
static void retrieveItem(char *name)
{
Data const *data;
cout << ">>> retrieve " << name << endl << endl;
if (database->retrieve(name, data))
cout << *data << endl;
else
cout << "not found" << endl;
cout << endl;
}
它在 BST 类中调用的函数看起来像这样(到目前为止)。我无法更改函数调用的参数。
bool BST::retrieve(const char *key, Data const *& data) const
{
int rIndex = 0;
while (rIndex <= capacity)
{
if (strcmp(items[rIndex].data.getName(), key) == 0)
{
data = items[rIndex].data;
return true;
}
else if (strcmp(items[rIndex].data.getName(), key) < 0)
rIndex = (rIndex * 2) + 1;
else if (strcmp(items[rIndex].data.getName(), key) > 0)
rIndex = (rIndex * 2) + 2;
}
return false;
}
有一个名为 items 的结构数组,看起来像这样
struct Item
{
Data data; // the data instance must be specified this way, NOT as a pointer
bool isEmpty = true;
int loc = 0;
};
Item *items;
最后我为数据类实现了以下赋值重载和复制构造函数(不能更改这个上的源文件)
Data::Data(const Data& source)
{
strcpy(this->name, source.name);
}
Data& Data::operator=(const Data& data2)
{
strcpy(this->name, data2.name);
return *this;
}
如果我错了,请纠正我,但似乎他在驱动程序中检索函数的目标是使用键(名称)搜索数据对象,然后将其复制到发送给函数的数据参数中.不幸的是,这条线
data = items[rIndex].data;
在我的检索功能中不适用于 .或 ->] 我有 90% 的把握。是访问它的正确方法,但我收到错误“不存在从 'Data' 到 'const Data *' 的合适转换类型”
如果不使用赋值重载运算符,或者我的重载实现错误,我还能如何实现这一点?
【问题讨论】:
-
一般来说你不是指 Data const *& data。当我看到类似的东西时,我很怀疑
-
@pm100 问题中的操作员指出,这是作业中提供的代码,无论多么可疑,他们都坚持使用它(我同意,说这有点奇怪最少)
标签: c++ oop pointers operator-overloading