Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 赋值运算符重载/检索函数_C++_Oop_Pointers_Operator Overloading - Fatal编程技术网

C++ 赋值运算符重载/检索函数

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

我正在尝试从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;
}
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
}