gpt4 book ai didi

c - 请求非结构或 union 中的成员 ‘a’

转载 作者:行者123 更新时间:2023-11-30 18:41:29 25 4
gpt4 key购买 nike

我浏览了之前有关该主题的帖子,但无济于事。我试图以不正确的方式访问 struct 中的 array,并收到错误request for member 'Days' in some 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 中使用 prototypes 进行原型(prototype)化:

    // 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])) 

预先感谢您的帮助! - 艾伦

<小时/>

编辑:感谢包括 Floris 和 ooga 在内的所有人帮助我。你的两个建议都很正确,我很感激。 - 艾伦

最佳答案

您正在调用电话

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

因为 timeSpanDays[] 实际上是同一结构的一部分。从代码可读性的角度来看,它要好得多。然后你用

来调用它
if(isConflict(&EE315, &EE367)) 

看看这整洁多了?

关于c - 请求非结构或 union 中的成员 ‘a’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com