Как инициализировать и выделить память для структуры данных и передать другой функции - PullRequest
1 голос
/ 16 февраля 2020

Во-первых, у меня есть структура данных struct cashier, которую я определил и которую нужно инициализировать. Он помещается в файл queue.c для использования queue.h файла. 1

/* queue.c */
    struct cashier {
        int numberOfCustomersServed; /* This should be initialized to 0 */
        int totalCustomerWaitingTime; /* This should be initialized to 0 */
        float totalAmountReceived; /* This should be initialized to 0 */
       queueADT customerQ; /* This should be initialized to an empty queue */
    };

Затем у меня есть файл queue.h для основной программы supermarket.c. И я определил тип cashierT и несколько других функций очереди. (queueADT getEmptyQueue(void); - это mallo c «очереди» структуры данных, которую я создал, и выделение для нее места в памяти.) 2

  /* queue.h*/
     typedef struct cashier cashierT;

В основной программе supermarket.c я инициализирую структуру кассира.

/* supermarket.c*/
cashierT initCashier(void){
    cashierT x;
    x.numberOfCustomersServed=0;
    x.totalCustomerWaitingTime=0;
    x.totalAmountReceived=0.0;
    x.customerQ=getEmptyQueue();

    return x;
  }; 

Но затем я получаю некоторые ошибки: 3

/cygdrive/c/Users/Heta/Desktop/CLionHWQ2/supermarket.c:12:10: error: return type is an incomplete type
 cashierT initCashier(void){
          ^~~~~~~~~~~
/cygdrive/c/Users/Heta/Desktop/CLionHWQ2/supermarket.c: In function 'initCashier':
/cygdrive/c/Users/Heta/Desktop/CLionHWQ2/supermarket.c:13:14: error: storage size of 'x' isn't known
     cashierT x;
              ^

Но если я скопирую и вставлю целые struct cashier в supermarket.c, ошибка исчезнет. Ссылка 3 Ссылка 1 . Почему существует такая проблема и как я могу ее исправить, если я хочу сохранить struct cashier и инициализацию в queue.c?

...