C 向量分配错误下标指向指向不完整类型的指针

C 向量分配错误下标指向指向不完整类型的指针,c,arrays,C,Arrays,我有我的产品 typedef struct proditem *prodItem; 我有一个产品的符号表 typedef struct tabp *tabP; struct tabp { prodItem vettP; int nP; }; 我需要在内存中分配, 然后: 但如果尝试使用vector选项卡->vettP,则会出现错误: tab->vettP[i]我自己解决了问题,丢失了一个指针* typedef struct tabp *tabP; struct tabp {

我有我的产品

typedef struct proditem *prodItem;
我有一个产品的符号表

typedef struct tabp *tabP;
struct tabp {
    prodItem vettP;
    int nP;
};
我需要在内存中分配, 然后:

但如果尝试使用vector选项卡->vettP,则会出现错误:


tab->vettP[i]我自己解决了问题,丢失了一个指针*

typedef struct tabp *tabP;
struct tabp {
    prodItem *vettP;
    int nP;
};
产品项目.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 */
符号表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 */
符号表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;
}

什么是structProdItem?您键入一个结构作为指针。所有这些代码都在同一个文件中吗?包括structProdItem——对我来说,当你有代码选项卡->vettP[i]Typedef指针时,structProdItem好像不知道是个坏主意:我个人的意见。BTW tab->vettP=mallocmax*sizeof*PRODUTEM;应为tab->vettP=mallocmax*sizeofstruct proditem@user3078414可能是某个人的DV,因为这不是问题的答案。这肯定是一个错误,但不是导致..指针指向不完整类型的错误。这种类型的错误只能用struct proditem posted解释。否则我们只是猜测和打赌;当然,@LPs,这一定是正确的方向:没有MCVE,助手的利他主义只不过是一种有根据的猜测。-:你确定吗?现在你有了一个指针的指针。与您发布的错误无关…是的,我将使用所有代码更新帖子。请注意typedefing指针。正如LPs所指出的,它们通常通过模糊间接寻址级别而导致的问题比它们通过保存键入来解决的问题还要多。
#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;
}