c - 与从函数返回结构类型相关的错误

标签 c

我无法弄清楚为什么 gcc 认为我正在尝试将整数分配给结构类型。以下代码尝试组合其他较短代码的函数,这些代码编译并运行得很好。

#include <stdio.h>
#include <stdbool.h>
 struct date
 {
    int month;
    int day;
    int year;
 };
struct time {
   int hour;
   int minutes;
   int seconds;
};
struct dateAndTime {
    struct date combinedDate;
    struct time combinedTime;
  };
void clockKeeper(struct dateAndTime dtAnTm )
  {
    //struct time testTime [] = { { 11, 59, 59 } , {12, 00, 00} , {1, 29, 59} , {23, 59, 59} , {19, 12, 27} };
    struct time testTime[] = {
      {.hour = 11, .minutes = 59, .seconds = 59},
      {.hour = 12, .minutes = 00, .seconds = 00},
      {.hour = 1,  .minutes = 29, .seconds = 59},
      {.hour = 23, .minutes = 59, .seconds = 59},
      {.hour = 19, .minutes = 12, .seconds = 27}
      };
    int i;
    struct time midNight = { 12, 00, 00};
    printf ("Here is what is in Midnight :%i:%i:%i \n", midNight.hour, midNight.minutes, midNight.seconds);
    for ( i = 0; i < 5; i++)
      {

         printf("Time is:  %.2i:%.2i:%.2i\n", testTime[i].hour, testTime[i].minutes, testTime[i].seconds);
         testTime[i] = timeUpdate (testTime[i]);
         printf("....one second later%.2i:%.2i:%.2i\n", testTime[i].hour, testTime[i].minutes, testTime[i].seconds);
         //if (testTime[i].hour > midNight.hour)
          // testTime[i]= dateUpdate (testTime[i]);
      }
  }
struct time timeUpdate ( struct time now)
  {
    ++now.seconds;
    if ( now.seconds == 60 ) { // next minute
         now.seconds = 0;
        ++now.minutes;
         if ( now.minutes == 60 ) {
         now.minutes = 0;
         now.hour++;
         if ( now.hour == 24 )  // midnight
         now.hour = 0;
         }
      }
  return now;
  }
struct date dateUpdate (struct date today)
{
   struct date tomorrow;
   int numberOfDays (struct date d);

   if (today.day != numberOfDays (today) ) {
      tomorrow.day = today.day + 1;
      tomorrow.month = today.month;
      tomorrow.year = today.year;
}
else if (today.month == 12 ) {
     tomorrow.day = 1;
     tomorrow.month = 1;
     tomorrow.year = today.year + 1;
}
else {
     tomorrow.day = 1;
     tomorrow.month = today.month + 1;
     tomorrow.year = today.year;
}
return tomorrow;
}
int numberOfDays (struct date d)
{
int days;
bool isLeapYear (struct date d);
const int daysPerMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if ( isLeapYear (d) == true && d.month == 2 )
   days = 29;
else
   days = daysPerMonth[d.month - 1];
return days;
}
// Function to determine if it's a leap year
bool isLeapYear (struct date d)
{
bool leapYearFlag;
if (( d.year % 4 == 0 && d.year % 100 !=0) || d.year % 400 == 0 )
    leapYearFlag = true;   // It's a leap year
else leapYearFlag = false; // Not a leap year
return leapYearFlag;
}
int main (void)
  {
void clockKeeper(struct dateAndTime dtAnTm);
bool isLeapYear (struct date d);
int numberOfDays (struct date d);
struct time timeUpdate(struct time now);
struct date dateUpdate (struct date today);
return 0;
  }

我收到以下错误:

 gcc  .c -o 
.c: In function 'clockKeeper':
.c:28:22: error: incompatible types when assigning to type 'struct time' from type 'int'
          testTime[i] = timeUpdate (testTime[i]);
                      ^
.c:31:23: error: incompatible types when assigning to type 'struct time' from type 'int'
            testTime[i]= dateUpdate (testTime[i]);
                   ^
.c: At top level:
.c:34:13: error: conflicting types for 'timeUpdate'
 struct time timeUpdate ( struct time now)
             ^
.c:28:24: note: previous implicit declaration of 'timeUpdate' was here
          testTime[i] = timeUpdate (testTime[i]);
                        ^
.c:49:13: error: conflicting types for 'dateUpdate'
 struct date dateUpdate (struct date today)
             ^
.c:31:25: note: previous implicit declaration of 'dateUpdate' was here
            testTime[i]= dateUpdate (testTime[i]);
                         ^
make: *** [] Error 1

我已经更新了结构数组 testTime[] 并注释掉了 dateUpdate () 调用,因为我确信这是不正确的。我仍然看到有关类型不匹配的错误:

.c:28:22: error: incompatible types when assigning to type 'struct time' from type 'int'
          testTime[i] = timeUpdate (testTime[i]);
                      ^

最佳答案

clockKeeper 中的几个问题:

  1. 初始化struct time testTime[]的一种正确方法是:

    struct time testTime[] = {
          {.hour = 11, .minutes = 59, .seconds = 59},
          {.hour = 12, .minutes = 00, .seconds = 00},
          {.hour = 1,  .minutes = 29, .seconds = 59},
          {.hour = 23, .minutes = 59, .seconds = 59},
          {.hour = 19, .minutes = 12, .seconds = 27}
    };
    
  2. 调用 dateUpdate(timeTime[i]) 类型不匹配。你这里的逻辑是错误的。

关于c - 与从函数返回结构类型相关的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379621/

相关文章:

c - C程序中的bash脚本代码

c - 输出不正确,简单的字符串练习 - C

python - 'strsep' 导致 Linux 内核卡住

c - 如何在 C 中创建对象数组?

c - 为什么 RegisterClassEx 失败

c - 这些错误是什么?

c - 为什么要将文件分割成 block 以进行 HTTP 流式传输?

c - 当我在 for 循环之外声明变量时,为什么我的代码不起作用?

对象引用的 Java 哈希表问题

c - 发送原始 http header