我有以下代码。
struct Node {
struct Node *next;
char type[12];
union {
struct A *a;
};
};
int main() {
char *x[6];
x[1] = "a";
x[2] = "bc";
x[3] = "bf";
x[4] = "bd";
x[5] = "ab";
x[6] = "b";
struct Node *new = (struct Node*) malloc(sizeof(struct Node));
struct A*a = (struct A*) malloc(sizeof(struct A));
*a->a = x[1];
*a->b = x[2];
*a->c = x[3];
*a->d = x[4];
new.a = a;
}
我正在尝试为a的每个属性赋予一个值,但我不断遇到如下错误。
struct or union expected at //*a->c= x[3];//
我也尝试过
*a.c= x[3];
a.c = x[3]
如何解决此错误?
答案 0 :(得分:1)
表达式*a->c
等于*(a->c)
。那就是您试图取消引用c
成员。
您收到的错误是因为a->c
不是指针或数组。您不能在不是指针或数组的对象上使用取消引用运算符。
尝试解除对a->d
的引用时,也会出现相同的错误。
您可能根本不应该在这里使用取消引用(即,您只需删除星号)。
答案 1 :(得分:0)
以下原因导致问题中显示的代码中的编译器错误:
sizeof(struct A)
时使用struct A
。a->a
尚未完全定义的情况下,使用a->b
,a->c
,a->d
和struct A
。new.a
,因为new
在struct Node *new
中被声明为指针。最后一个可能会产生问题中所述的错误消息,即结构或联合是期望的。问题所声明的行不会产生此消息a->c= x[3];
,因为除->
之外,该语句中没有使用任何期望结构或联合的运算符,char *x[6]; … x[6] = "b";
可以正确接收指向结构的指针(尽管不完整)定义)。
因此,我怀疑问题中错误地报告了获取消息的代码或消息的位置。
此外,[6[
是错误的;当使用MKMapView
定义数组时,其有效索引从0到5,而不是6。