我有两个结构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;我得到一个错误“无效的类型参数'->'”。
怎么啦?(假设一切都已初始化并正确分配)
发布于 2013-03-27 11:50:49
通常,invalid type argument of '->'意味着您应该使用点运算符(.),其中使用了点差异运算符(->),如this one等问题所示。
在您的代码中,如果您执行了以下操作,则可以看到以下内容:
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-27 13:49:05
结构的每个右括号后面都应该有;符号。
您的代码没有任何问题
struct B* sB;
int x = sB->ptrs[0]->v;但是你需要初始化你的sB。
https://stackoverflow.com/questions/15651247
复制相似问题