'void *'不是指向对象的指针类型

时间:2013-10-16 12:56:42

标签: c++ pointers void-pointers

struct limit{
  int up;
  int down;
};

void *x;

struct limit *l;
l->up=1;
l->down=20;

x=l;

cout<<x->up;

这是我的代码的一部分我在最后一行收到错误'void *'不是指针对象类型。我知道我的代码中的最后一行是错误的。我只想知道如何使用x变量打印上下值。

1 个答案:

答案 0 :(得分:5)

在这部分:

struct limit *l;
l->up=1;
l->down=20;

您要取消引用未初始化的指针l,这会导致 未定义的行为 。但是,即使您正确初始化它,在将其分配给void*后,也无法取消引用void指针:

void* x = l;
cout<< x->up;

您需要明确地将其转发回struct limit*

void* x = l;
struct limit * y = static_cast<struct limit*>(x);
cout << y->up;

或更好:避免在第一时间使用void*


由于您提及由于而执行此操作,因此this answer会帮助您:)