0

我在构造 void* 时遇到问题。我的 C++ 代码如下:

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* 因为有时我需要指向其他类型的缓冲区。

4

3 回答 3

2

不要使用void*类型,而是使用BUFF_TYPE*.

如果您void*出于其他原因需要(不太可能基于您的代码),您可以通过转换指针来解决这个问题。

x = ((BUFF_TYPE*)regs[4].buff)->a;
y = ((BUFF_TYPE*)regs[4].buff)->b;
于 2012-06-30T22:31:23.733 回答
1

在使用 -> 之前,必须将 regs[4].buff 强制转换为 BUFF_TYPE*​​,因此需要:

((BUFF_TYPE*​​) regs[4].buff)->a

于 2012-06-30T22:31:03.823 回答
0

在取消引用之前将结构的void* buff成员强制转换为 a。REG_TYPEBUFF_TYPE*

于 2012-06-30T22:33:29.367 回答