C++ 赋值运算符重载/检索函数
我正在尝试从BST中检索一个项,用于类中的作业。提供的一些代码我是不允许修改的。讲师在驱动程序中创建了一个检索函数(我无法更改),如下所示C++ 赋值运算符重载/检索函数,c++,oop,pointers,operator-overloading,C++,Oop,Pointers,Operator Overloading,我正在尝试从BST中检索一个项,用于类中的作业。提供的一些代码我是不允许修改的。讲师在驱动程序中创建了一个检索函数(我无法更改),如下所示 static void retrieveItem(char *name) { Data const *data; cout << ">>> retrieve " << name << endl << endl; if (database->retrieve
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;
}
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 = items[rIndex].data;
在我的检索函数中,无法使用。或->]
我有90%的把握。是访问它的正确方法,但我收到了错误“不存在从'Data'到'const Data*'的合适转换类型”
如果不使用赋值重载运算符,或者重载的实现错误,我如何实现这一点
bool BST::retrieve(const char *key, Data const *& data) const
第二个参数是对常量数据指针的引用,因此必须将其设置为指向项[rIndex].Data
的指针,而不是其值
考虑以下几点
void foo(int & out)
{
out = 42;
}
当它被这样称呼的时候
// ...
int x = 0;
foo(x);
std::cout << x;
/。。。
int x=0;
foo(x);
std::cout那么我是否需要创建一个单独的指针变量,并将其指向项[rIndex].data
,然后将该指针用作第二个参数?分配的目标是驱动程序函数中的数据对象,不是吗?而且没有其他成员问题出在BST::retrieve
,而不是调用代码。我仍然不明白如何解决它。一般来说,你不是指数据常量*&Data。当我看到这样的事情时,我感到非常高兴suspicious@pm100op在问题中表示,这是作业中提供的代码,他们坚持使用它,不管它有多可疑(我同意,至少可以说这有点奇怪)
void foo(int & out)
{
out = 42;
}
// ...
int x = 0;
foo(x);
std::cout << x;
int x; // global
// ...
void foo(int *& out)
{
x = 42;
out = &x; // set out to pointer to x
}
int main()
{
int * ptr = nullptr;
foo(ptr); // foo will set ptr to the pointer to x
std::cout << *ptr; // prints 42
}