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
変数を使用して上下の値を出力する方法を知りたいだけです。
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
変数を使用して上下の値を出力する方法を知りたいだけです。
この部分では:
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*
に、最初から使用しないでください。