D'accord et du coup comme on travaille presque qu'avec les typedef * truc, ça explique pourquoi on met jamais * devant nos déclarations. Par contre, je veux bien déclarer mon tableau comme tu l'as indique
BaseNIntegerList tabDeBaseNIntegerList;
mais à ce moment la admettons je déclare
1 2 3
|
BaseNIntegerList LOL = L_BNI_LOL->tabDeBaseNIntegerList;
mais si fais L_BNI_LOL->tabDeBaseNIntegerList[truc] |
c'est plus une BaseNIntegerList mais juste une BaseNInt à laquelle j'accède enfin netBeans me dit ça en tout cas quand je veux faire
1 2 3 4
|
BaseNIntegerList BNI = L_BNI_LOL->tabDeBaseNIntegerList;
BNI = insertTail(BNI, val);
L_BNI_LOL->tabDeBaseNIntegerList[1] = BNI; |
Du coup la question de est ce que mon
typedef BaseNInt * BaseNIntegerList ;
est bien nécessaire, sinon je dois remodifier les prototypes des fonctions sur les BaseNIntegerList puisque je ne pourrai plus utiliser mon insertHead avec les []
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| BaseNIntegerList insertHead(BaseNIntegerList L_BNI, CHAINE val)
{
//On declare l'element à integrer dans la liste
listOfElem nouveau;
nouveau = malloc(sizeof(element));
nouveau->valeur = val;
//Cas de la liste vide nbElem = 0
if(hasNoElem(L_BNI))
{
nouveau->next = NULL;
nouveau->prev = NULL;
L_BNI->last = nouveau;
L_BNI->first = nouveau;
}
else //Cas d'une liste non vide
{
//Raccordement de l'element à la liste
nouveau->next = L_BNI->first;
nouveau->prev = NULL;
L_BNI->first->prev = nouveau;
L_BNI->first = nouveau;
}
L_BNI->nbElem = L_BNI->nbElem + 1;
return L_BNI;
} |
EDIT : j'ai fait des test, sans * dans la structure, sans le typedef que je remets en question plus haut, rien n'y fait pour l'instant, je n'arrive pas à faire en sorte que
BNI_ListOfList->tabDeBaseNIntegerList[cpt]
soit de type BaseNIntegerList
actuellement j'ai les structures
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
typedef struct elem {
struct elem *prev;
CHAINE valeur;
struct elem *next;
} element;
typedef element * listOfElem;
typedef struct BNInt {
struct elem *first;
struct elem *last;
int base;
int nbElem;
} BaseNInt;
typedef BaseNInt * BaseNIntegerList ;
typedef struct BNIntLofL {
int base;
BaseNIntegerList tabDeBaseNIntegerList;
} BaseNIntLofL;
typedef BaseNIntLofL * BaseNIntegerListOfList; |
et si je fais
1 2 3 4 5 6 7 8 9 10 11 12
|
BaseNIntegerListOfList BNI_ListOfList ;
BNI_ListOfList = malloc(sizeof(BaseNIntLofL));
BNI_ListOfList->tabDeBaseNIntegerList = malloc(base*sizeof(BaseNInt));
for(cpt=0;cpt<base;cpt++)
{
BNI_ListOfList->tabDeBaseNIntegerList[cpt].base = base;
BNI_ListOfList->tabDeBaseNIntegerList[cpt].first = NULL;
BNI_ListOfList->tabDeBaseNIntegerList[cpt].last = NULL;
BNI_ListOfList->tabDeBaseNIntegerList[cpt].nbElem = 0;
} |
sauf que du coup BNI_ListOfList->tabDeBaseNIntegerList[cpt] est une BaseNInt et pas une BaseNIntegerList comme je le voudrais, ce que je ne comprends d'ailleurs pas trés bien puisque pour créer mes BaseNIntegerList j'ai
1 2 3 4 5 6 7 8 9 10
| BaseNIntegerList createIntegerList(int integer)
{
BaseNIntegerList List_BNI;
List_BNI = malloc(sizeof(BaseNInt));
List_BNI->base = integer;
List_BNI->nbElem = 0;
List_BNI->first = NULL;
List_BNI->last = NULL;
return List_BNI;
} |
et que dans createBucketList je fais exactement le même malloc avec un *base
Partager