我有两个结构A& B:
struct A {
int v;
}
struct B {
struct A* ptrs[MAX_PTRS];
}
基本上,我希望struct B的元素是一个指向struct A的指针数组(MAX_PTRS是一个在头文件中定义的宏)。
现在,我说有一个全局变量:
struct B* sB;
出于某种原因,如果我尝试以下命令
int x = sB->ptrs[0]->v;
我收到错误“' - >'的无效类型参数。”
有什么问题? (假设所有内容都已初始化并正确分配)
答案 0 :(得分:1)
通常invalid type argument of '->'
表示您应该使用点运算符(.
),其中您使用了点引用运算符(->
),如this one之类的问题所示。< / p>
在您的代码中,如果您已完成此操作,则可以看到:
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;
}
答案 1 :(得分:0)
结构应该有;
符号。
你的代码没有错误
struct B* sB;
int x = sB->ptrs[0]->v;
但你需要初始化你的sB。