在C ++中取消引用void指针

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

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

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

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

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

 cout<data)); 

我明白了 –

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

当我为其分配int的地址时,无效指针是否被转换为int指针类型?

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

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

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

因为这是C ++,所以你应该使用C ++强制转换而不是C样式转换。 你不应该在C ++等中使用malloc等。

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

 template  struct node { T *data; node *next; }; 

然后:

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

最后:

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

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

Typecast temp->数据到int然后打印。

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