2012-06-30 20 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