2013-10-16 15 views
1
struct limit{ 
    int up; 
    int down; 
}; 

void *x; 

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

x=l; 

cout<<x->up; 

這是我的代碼,我在最後一行「無效*」得到錯誤的部分是不是一個指針到對象類型。我知道我的代碼中的最後一行是錯誤的。我只想知道如何使用x變量打印和打印數值。「無效*」不是一個指針到對象類型

+5

您無法通過'void'指針訪問任何成員。你爲什麼想這樣做?你能提供一些背景嗎? –

+5

你必須_cast_'x'。如果你不知道什麼是類型轉換,你應該得到一些學習資源。 – Zeta

+5

請注意,您在上面的代碼中使用未初始化的'l'。 –

回答

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將幫助你:)

+0

而不是** static_cast **我們可以使用**(limit *)**。它工作 – rock

+0

@rock:在這種情況下(+假設這是C++),'static_cast'比C-style更合理:) – LihO

+0

我們可以使用混合的c和C++ :) – rock

相關問題