1
struct limit{
  int up;
  int down;
};

void *x;

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

x=l;

cout<<x->up;

这是我的代码的一部分,我在最后一行出现错误'void*' is not a pointer-to-object type。我知道我的代码中的最后一行是错误的。x我只想知道如何使用变量打印上下值。

4

1 回答 1

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*首先避免使用。


既然您提到您这样做是因为 ,那么这个答案将对您有所帮助:)

于 2013-10-16T13:03:45.907 回答