0

我有 2 个结构 A 和 B:

struct A {
 int v;
}

struct B {
 struct A* ptrs[MAX_PTRS];
}

基本上,我希望结构 B 的元素是指向结构 A 的指针数组(MAX_PTRS 是在头文件中定义的宏)。

现在,假设我有一个全局变量:

struct B* sB;

出于某种原因,如果我尝试以下命令

int x = sB->ptrs[0]->v;

我收到错误“'->' 的类型参数无效”。

怎么了?(假设一切都已正确初始化和分配)

4

2 回答 2

1

通常invalid type argument of '->'意味着您应该使用点运算符 ( .),而您使用的是点引用运算符 ( ->),如在类似问题中所见

在您的代码中,如果您这样做了,您可以看到这一点:

struct A {
 int v;
};

struct B {
 struct A ptrs[MAX_PTRS];  // note the missing *
};

这种缺失*将导致您看到的错误:error: invalid type argument of ‘->’ (have ‘struct A’)

如果一切都真正初始化并正确分配,那么应该没有问题,看这个例子:

#define MAX_PTRS 3

struct A {
 int v;
};

struct B {
 struct A ptrs[MAX_PTRS];
};

int main (int argc, char *argv[]) {
    struct B *sB = malloc(sizeof(struct B));
    sB->ptrs[0] = malloc(sizeof(struct A));
    sB->ptrs[0]->v = 10;
    int x = sB->ptrs[0]->v;
    printf("%d\n", x);
    return 0;
}
于 2013-03-27T03:50:49.010 回答
0

结构在每个右括号后都应该有;符号..

你的代码没有问题

struct B* sB;

int x = sB->ptrs[0]->v;

但你应该需要初始化你的 sB。

于 2013-03-27T05:49:05.003 回答