【问题标题】:structure initialization error: incompatible types when initializing结构初始化错误:初始化时类型不兼容
【发布时间】:2015-01-13 19:12:25
【问题描述】:

我在通过 C 中的函数初始化结构时遇到问题,我似乎找不到这里有什么问题。以下是我的代码的相关部分:

struct Date
 {
     int nMonth;
     int nDay;
     int nYear;
 };

 struct Book
 {
     char szISBN[10];
     char szTitle[75];
     char szType[50];
     char szPublisher[75];
     int nPages;
     float fPrice;
     int nYearOfPub;
     int nStatus;
     char szHolder[50];
     struct Date dueDate;
 };

稍后,在我的一个函数中:

struct Book addNewBook(struct Book *pBooks, int nStock, struct tm *t)
 {
     char szISBN[10];
     char szTitle[75];
     char szType[50];
     char szPublisher[75];
     int nPages;
     float fPrice;
     int nYearOfPub;
     int nStatus;
     char szHolder[50];
     struct Date dueDate = {t->tm_mon+1, t->tm_mday, t->tm_year+1900};//we will set this to be the current day by default

     ...

     struct Book newBook = {*szISBN, *szTitle, *szType, *szPublisher, nPages, fPrice, nYearOfPub, nStatus, *szHolder, dueDate};
     return newBook;
 }

我不断收到这个看起来很简单的错误,似乎无法修复它。

error: incompatible types when initializing type 'char' using type 'struct Date'

除非我有阅读障碍,否则当我创建 Book 结构时,程序顶部的数据类型与我稍后在程序中的方法中初始化新书的位置匹配得很好。我在这里想念什么?怎么回事?

编辑:这是我使用的解决方案,感谢 REACHUS 链接了另一个帮助我找到解决方案的问题。

struct Book addNewBook(struct Book *pBooks, int nStock, struct tm *t)
 {
     ...
     struct Book newBook = {"", "", "", "", nPages, fPrice, nYearOfPub, nStatus, "", dueDate};
     strncpy(newBook.szISBN, szISBN, 10);
     strncpy(newBook.szTitle, szTitle, 75);
     strncpy(newBook.szType, szType, 50);
     strncpy(newBook.szPublisher, szPublisher, 75);
     strncpy(newBook.szHolder, szHolder, 50);
     return newBook;
 }

【问题讨论】:

  • 什么是struct tm
  • @REACHUS: struct tm 包含在 中,我只是在这里使用它来获取系统日期。

标签: c data-structures compiler-errors initialization


【解决方案1】:

初始化器中的*szHolder等价于szHolder[0],所以这是char

相比之下,struct 字段 char szHolder[50] 是一个数组。数组不能由表达式初始化,它们必须有一个 { .. something .. } 初始化器。这类似于数组也不能赋值。

但是,如果这确实是您得到的诊断信息,那它就不仅仅是神秘的了。

【讨论】:

  • 那么对于 char szISBN[10] 和我要初始化的所有其他字符串也是如此?那么,您对如何正确初始化这些 char 数组有任何建议的解决方案吗?如果我将它保留为 szHolder,而不是 *szHolder,那么我会在构建日志中收到很多警告,告诉我“初始化从没有强制转换的指针生成整数 [默认启用]”最初我只是忽略了这些警告,因为我没有'不理解它们,并认为它们是我遇到的更大问题的副作用(我经常遇到这种情况)。
【解决方案2】:

您可以按照this question 的答案之一中描述的相同方式填写您的Book struct

【讨论】:

  • 谢谢,这就是我最终做的。我在 initalizer 中为每个 char 数组输入了“”,然后在接下来的几行中,我继续使用 strncpy() 将“”替换为我希望放入结构字段中的正确值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多