通常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;
}