gpt4 book ai didi

c++ - C++ 中的指针、类和 void*

转载 作者:太空宇宙 更新时间:2023-11-04 14:50:56 25 4
gpt4 key购买 nike

我得到了斐波那契堆的代码。此代码使用以下函数比较两个键:

int
cmp(void *x, void *y)
{
int a, b;
a = (int)x;
b = (int)y;

if (a < b)
return -1;
if (a == b)
return 0;
return 1;
}

这是可行的,因为 KEY 当前是一个 INT 数字。

我想修改此代码以使用名为“Node”的类。这个类已经实现了运算符<。 >、<=、== 和 >=。

我在代码中的改编是:

Node a, b   // instead int a, b
a = (Node)x;
b = (Node)y;

但是我得到了错误:

dijkstra.cpp:168: error: no matching function for call to 'Node::Node(void*&)'
graph.h:39: note: candidates are: Node::Node()
graph.h:39: note: Node::Node(const Node&)

我也试过:

Node a, b   // instead int a, b
a = (Node*)x;
b = (Node*)y;

得到错误:

dijkstra.cpp:168: error: no match for 'operator=' in 'a = (Node*)x'
graph.h:39: note: candidates are: Node& Node::operator=(const Node&)

我放弃尝试设置值并按如下方式解决问题:

int cmp(void *x, void *y)
{
if ((Node*)x < (Node*)y)
return -1;
if ((Node*)x == (Node*)x)
return 0;
return 1;
}

我想了解我在前面的示例中做错了什么。

提前致谢。

最佳答案

更改以下行

a = (Node*)x;
b = (Node*)y;

a = *( (Node*) x); 
// type cast from void* to Node* and then fetch the contents by dereferencing the pointer.

b = *( (Node*) y);

您只是将指针从 void* 类型转换为 Node* 并尝试将指针分配给类型为 Node 的变量。

关于c++ - C++ 中的指针、类和 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com