我有我的产品
typedef struct proditem *prodItem;
我有一个产品符号表
typedef struct tabp *tabP;
struct tabp {
prodItem vettP;
int nP;
};
我需要在内存中分配, 然后:
tab->nP = max; // quantity of products
tab->vettP = malloc(max * sizeof(*prodItem));
但是如果尝试使用vector tab-> vettP会出现错误:
tab->vettP[i]
<< - 指向不完整类型的下标
任何人都可以帮助我吗?
答案 0 :(得分:-1)
我解决了自己,错过了一个指针*
typedef struct tabp *tabP;
struct tabp {
prodItem *vettP;
int nP;
};
产品item.h:
#ifndef prodItem_h
#define prodItem_h
#include <stdio.h>
#include <stdlib.h>
typedef struct proditem *prodItem;
typedef char* prodKey ;
prodItem prodItemScan(FILE*);
void prodItemShow(FILE*, prodItem);
int prodItemCheckVoid(prodItem);
void prodItemFree(prodItem);
int prodItemGreater(prodItem,prodItem);
prodKey prodKeyGet(prodItem);
int prodKeyComp(prodKey, prodKey);
#endif /* prodItem_h */
符号table.h
#ifndef tabP_h
#define tabP_h
#include <stdio.h>
#include "proditem.h"
typedef struct tabp *tabP;
tabP tabPScan(FILE*);
void tabPShow(FILE*,tabP);
void tabPFree(tabP);
int tabPCount(tabP);
int tabPSearch(tabP, prodKey);
#endif /* tabP_h */
symbol table.c
#include "tabP.h"
struct tabp {
prodItem *vettP;
int nP;
};
tabP tabPScan(FILE *f) {
int max;
fscanf(f,"%d", &max);
tabP tab = malloc((sizeof(*tab)));
tab->nP = max;
tab->vettP = malloc(max * sizeof(prodItem));
for(int i=0; i<max; i++) {
tab->vettP[i] = prodItemScan(f);
}
return tab;
}
void tabPShow(FILE *f, tabP tab){
for(int i=0; i<tab->nP; i++) {
prodItemShow(f, tab->vettP[i]);
}
}
int tabPCount(tabP tab) {
return tab->nP;
}
int tabPSearch(tabP tab, prodKey key) {
for (int i=0; i<tab->nP; i++) {
if (prodKeyComp( prodKeyGet(tab->vettP[i]), key)==1){
return i;
}
}
return -1;
}