2012-06-30 39 views
0

我遇到了void * to struct的問題。我的C++代碼如下:如何在第二個struct中訪問由void *指向的結構的元素

struct BUFF_TYPE { 
    int a; 
    int b; 
}; 
typedef struct BUFF_TYPE BUFF_TYPE; 

struct REG_TYPE { 
    int c; 
    void *buff; 
}; 
typedef struct REG_TYPE REG_TYPE; 

REG_TYPE regs[20]; 
const BUFF_TYPE b_A = {3,5}; 


void func_x() { 
    int x,y; 
    regs[4].buff = (BUFF_TYPE*)&b_A; 
    x = regs[4].buff->a; 
    y = regs[4].buff->b; 
} 

它給我:

error: ‘void*’ is not a pointer-to-object type 
在x和y分配

,你能告訴我如何訪問這些a和b的值?

順便說一句,我需要void *,因爲有時我需要指向其他類型的緩衝區。

+0

這是C嗎?還是C++? – robert

+0

你好,它在C++ –

+0

你需要發佈你正在編譯的確切代碼。您最初發布的代碼有幾個錯別字。 (我已經修好了。)另外,''typedef's在C++中是不必要的;如果你聲明瞭一個'struct BUFF_TYPE'類型,你可以把它稱爲'BUFF_TYPE'。 (這與C不同) –

回答

1

之前使用 - >,必須轉換的REG [4] .buff到BUFF_TYPE *,所以你需要:

((BUFF_TYPE *)的REG [4] .buff) - >一

+0

太棒了!這是解決方案! –

2

唐不使用void*類型,而是使用BUFF_TYPE*

如果因爲其他原因需要void*(不太可能基於您的代碼),您可以通過投射指針來解決此問題。

x = ((BUFF_TYPE*)regs[4].buff)->a; 
y = ((BUFF_TYPE*)regs[4].buff)->b; 
+0

這會試圖將'regs [4] .buff-> b'強制轉換爲BUFF_TYPE *',這是行不通的。 – robert

+0

那裏,修好了。 – Tibor

0

角色的REG_TYPE結構到BUFF_TYPE*解引用它之前的void* buff構件。

+0

對於downvoter這個答案如何不同於OP接受的答案或當前評分最高的答案? – mathematician1975

相關問題