1

我正在尝试实现一个通用链表。节点的结构如下 -

typedef struct node{
        void *data;
        node *next;      
};

现在,当我尝试为数据分配地址时,例如假设为 int,例如 -

int n1=6;
node *temp;
temp = (node*)malloc(sizeof(node));
temp->data=&n1;

如何从节点获取 n1 的值?如果我说 -

cout<<(*(temp->data));

我得到 -

`void*' is not a pointer-to-object type 

当我为它分配一个 int 地址时,void 指针不会被强制转换为 int 指针类型吗?

4

4 回答 4

10

您必须首先将void*指针类型转换为实际有效的类型(例如int*),以告诉编译器您希望取消引用多少内存。

于 2012-05-16T08:49:56.083 回答
4

无法取消引用 void 指针。您需要将其转换为合适的非空指针类型。在这种情况下,int*

cout << *static_cast<int*>(temp->data);

由于这是 C++,因此您应该使用 C++ 强制转换而不是 C 样式强制转换。而且您不应该malloc在 C++ 等中使用。

于 2012-05-16T08:50:08.600 回答
2

无法取消引用 void 指针。您需要将其转换为合适的非空指针类型。问题是关于 C++,所以我建议考虑使用模板来实现你的目标:

template <typename T> struct node
{
   T *data;
   node<T> *next;      
};

然后:

int n1=6;
node<int> *temp = new node<int>();
temp->data=&n1;

最后:

cout << (*(temp->data));

可以进行类型转换,但这将是一种 C 风格的类型不安全解决方案,而不是 C++ 解决方案。

于 2012-05-16T09:05:07.637 回答
0

将 temp->data 类型转换为 int 然后打印。

cout<<*((int *)temp->data);
于 2012-05-16T09:09:14.237 回答