Код, подобный
struct a
{
int i;
} A;
, даст переменную A
, которую вы можете использовать, например,
A.i = 42;
Однако, похоже, вы действительно пытаетесь создать новый тип.Поэтому попробуйте:
typedef struct a // Notice the "typedef" in start of line
{
int i;
} A;
Это даст тип A
, который можно использовать как:
A var;
A* pVar;
var.i = 42;
pVar = &var;
....
Также обратите внимание, что ваш struct order
использует тип LIST
.Так что LIST
должно быть объявлено до struct order
.Кроме того, тип CUSTOMER
также должен быть объявлен, чего на данный момент нет.
Поэтому ваш код, вероятно, должен выглядеть следующим образом:
#define N 42 // Made this up as it isn't in your code
typedef struct customer // Made this up as it isn't in your code
{
int x;
} CUSTOMER;
typedef struct list
{
void* item[N];
int (*compare)(void*, void*);
int length;
}LIST;
typedef struct order
{
int orderId;
float orderTotal;
LIST* orderItems;
CUSTOMER* customer;
int length;
} ORDER;
typedef struct item
{
char itemName[32];
float price;
int quantity;
}ITEM;
Также обратите внимание, что в этой строке есть проблема:
ITEM* p = o->orderItems->item;
Тип o->orderItems->item
- это массив пустых указателей из-за void* item[N];
в struct list
.Другими словами: вы пытаетесь присвоить массив указателей одному указателю.Я не совсем уверен, что вы хотите сделать, но, возможно, как:
ITEM* p = o->orderItems->item[0];