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

Sri*_*sha 1 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;
Run Code Online (Sandbox Code Playgroud)

这是我的代码,我在最后一行得到错误的部分"无效*"不是一个指针到对象类型.我知道我的代码中的最后一行是错误的.我只想知道如何使用x变量打印上下值.

Lih*_*ihO 5

在这部分:

struct limit *l;
l->up=1;
l->down=20;
Run Code Online (Sandbox Code Playgroud)

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

void* x = l;
cout<< x->up;
Run Code Online (Sandbox Code Playgroud)

你需要明确地将它强制转换为struct limit*:

void* x = l;
struct limit * y = static_cast<struct limit*>(x);
cout << y->up;
Run Code Online (Sandbox Code Playgroud)

或者甚至更好:避免void*在第一时间使用.


既然你提到你因为这样做 ,那么这个答案会帮助你:)