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

标签 c arrays struct function-pointers

我浏览了之前有关该主题的帖子,但无济于事。我试图以不正确的方式访问 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/

相关文章:

c - 将结构初始化为 0

c++ - FORTRAN 中函数的基本结构是什么?

c - 如何测量我的全局变量的总大小?

ios - 使用 Firebase 异步字典下载创建对象数组 (Swift)

javascript - 使用 jQuery ajax 通过 formData 将二维数组发送到 pythonflask

objective-c - 在 Objective-C 中转发声明一个结构

c - 程序进入无限循环而不是调用函数?

c - 如何创建分布式阵列 MPI

C 字符串数组操作

c# - 在 C# 中,我应该使用 struct 来包装一个对象以实现额外的接口(interface)吗?