结构初始化错误:初始化时不兼容的类型

时间:2014-11-16 23:03:25

标签: c data-structures compiler-errors initialization

我在使用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;
 }

2 个答案:

答案 0 :(得分:0)

初始值设定项中的

*szHolder相当于szHolder[0],因此这是char

与此相反,struct字段char szHolder[50]是一个数组。数组不能通过表达式初始化,它们必须需要{ .. something .. }初始值设定项。这类似于无法分配数组的事实。

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

答案 1 :(得分:0)

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