我查看了之前关于该主题的帖子无济于事。我试图以不正确的方式访问array
中的struct
并收到错误request for member ‘Days’ in something not a structure or union
。
我.c
中的相关行:
bool isConflict(TimeSpan *timeA, TimeSpan *timeB, Class *classA[], Class *classB[])
{ // Checking that days themselves conflict
int i;
for (i = 0; i < 7; i++) {
if ((classA->Days[i] == classB->Days[i]) && (classA->Days[i] != 0)){
doStuff;
}
错误本身正在我尝试访问Days[]
的方式发生在这个底线。 Days本身就是我的.h中的原型,prototype
s:
// TimeSpan is a previously created struct that is functioning correctly
typedef struct Class
{ TimeSpan timeSpan;
int Days[7];
} Class;
bool isConflict(TimeSpan * a, TimeSpan * b, Class * classA[], Class * classB[]);
最后,我的司机电话看起来像:
if(isConflict(&EE315.timeSpan, &EE367.timeSpan, &EE315.Days[7], &EE367.Days[7]))
提前感谢您的帮助! - 艾伦
答案 0 :(得分:2)
您正在使用
进行通话if(isConflict(&EE315.timeSpan, &EE367.timeSpan, &EE315.Days[7], &EE367.Days[7]))
所以你的第三个论点是
&EE315.Days[7]
是指向数组Days
的元素7的指针。你想要的是
&EE315
这是指向你的结构的指针...所以调用变为
if(isConflict(&EE315.timeSpan, &EE367.timeSpan, &EE315, &EE367))
看看它是否适合你。
另请注意,您将自己的功能声明为
bool isConflict(TimeSpan * a, TimeSpan * b, Class * classA[], Class * classB[]);
您可能想要使用
bool isConflict(TimeSpan * a, TimeSpan * b, Class * classA, Class * classB);
因为你指的是一个元素,而不是一个元素数组(我认为)。
<强>事后强>
更改代码可能更容易,如下所示:
bool isConflict( Class *a, Class *b ) {
int i;
for (i = 0; i < 7; i++) {
if ((a->Days[i] == b->Days[i]) && (a->Days[i] != 0)){
doStuff;
}
}
由于timeSpan
和Days[]
实际上都是同一结构的一部分。从代码可读性的角度来看,它要好得多。然后你用
if(isConflict(&EE315, &EE367))
看看有多整洁?
答案 1 :(得分:1)
我认为你的意思是拥有这个原型:
bool isConflict(TimeSpan * a, TimeSpan * b, int daysA[], int daysB[]);
并将其称为:
if(isConflict(&EE315.timeSpan, &EE367.timeSpan, &EE315.Days, &EE367.Days))
显然,您必须更改函数的定义才能访问新参数类型。