Probléme à la compilation[C++]

Ralphy_ -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Avec des amis nous travaillons sur un projet de programmation, lors de la compilation de notre programme, il retourne les erreurs suivantes

Compiler: Default compiler
Executing  g++.exe...
g++.exe "E:\raphtest.cpp" -o "E:\raphtest.exe"    -I"E:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include"  -I"E:\Dev-Cpp\include\c++\3.4.2\backward"  -I"E:\Dev-Cpp\include\c++\3.4.2\mingw32"  -I"E:\Dev-Cpp\include\c++\3.4.2"  -I"E:\Dev-Cpp\include"   -L"E:\Dev-Cpp\lib" 
E:\raphtest.cpp: In function `int main()':
E:\raphtest.cpp:462: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void MajLig(int, element**, int, int)'
E:\raphtest.cpp:463: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void MajCol(int, element**, int, int)'

E:\raphtest.cpp:464: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void MajBloc(int, element**, int, int, int)'
E:\raphtest.cpp:468: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void RetablirDansLig(int, element**, int, int)'
E:\raphtest.cpp:469: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void RetablirDansCol(int, element**, int, int)'
E:\raphtest.cpp:470: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void RetablirDansBloc(int, element**, int, int, int)'
E:\raphtest.cpp:475: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void MajLig(int, element**, int, int)'
E:\raphtest.cpp:476: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void MajCol(int, element**, int, int)'
E:\raphtest.cpp:477: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void MajBloc(int, element**, int, int, int)'
E:\raphtest.cpp:509: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle1(int, element**, int, int, int*)'
E:\raphtest.cpp:515: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle2col(int, element**, int, int*)'
E:\raphtest.cpp:519: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle2lig(int, element**, int, int*)'
E:\raphtest.cpp:524: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle2bloc(int, element**, int, int, int*)'
E:\raphtest.cpp:529: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle3Lig(int, element**, int, int*)'
E:\raphtest.cpp:533: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle3Col(int, element**, int, int*)'

E:\raphtest.cpp:538: error: cannot convert `element (*)[((unsigned int)((int)n))]' to `element**' for argument `2' to `void Regle3Bloc(int, element**, int, int, int*)'

Execution terminated



Voici les signatures des fonctions concernées :
void MajLig(int n,element** grille, int l, int v)
void MajCol(int n,element** grille, int c, int v)
void MajBloc(int n,element** grille, int l,int c,int v)
void RetablirDansBloc(int n, element** grille, int l, int c, int v)
void RetablirDansCol(int n,element** grille, int c, int v)
void RetablirDansLig(int n,element** grille,int l, int v)
void Regle3Lig(int n,element** grille,int lig, int *comptRemplissage)
void Regle3Col(int n,element** grille,int col, int *comptRemplissage)
void Regle3Bloc(int n,element** grille, int FactCol,int FactLig, int *comptRemplissage)
void Regle2lig(int n, element** grille, int lig, int* comptRemplissage)
void Regle2col(int n,element** grille,int col, int* comptRemplissage)
void Regle2bloc(int n, element** grille, int FactLig, int FactCol, int* comptRemplissage)
void Regle1(int n,element** grille, int lig, int col, int* comptRemplissage)

Voici comment on fait appel aux fonctions via le main :
MajLig( n, grille, lig-1, valeurTemp);
MajCol(n, grille, col-1, valeurTemp);
MajBloc(n, grille, lig-1, col-1, valeurTemp);
RetablirDansLig(n, grille, lig-1, grille[lig-1][col-1].ValeurFinale);
RetablirDansCol(n,grille,col-1, grille[lig-1][col-1].ValeurFinale);
RetablirDansBloc(n,grille,lig-1, col-1, grille[lig-1][col-1].ValeurFinale);
MajLig(n,grille, lig-1, valeurTemp);
MajCol(n,grille, col-1, valeurTemp);
MajBloc(n,grille, lig-1,col-1, valeurTemp);
Regle1(n,grille,lig,col, &comptRemplissage);
Regle2col(n,grille,col,&comptRemplissage);
Regle2lig(n,grille,lig,&comptRemplissage);
Regle2bloc(n, grille,FactCol,FactLig,&comptRemplissage);
Regle3Lig(n,grille, lig, &comptRemplissage);
Regle3Col(n,grille,col,&comptRemplissage);
Regle3Bloc(n,grille,FactCol,FactLig,&comptRemplissage);




Je ne pense pas que le souci vienne des ordinateurs surlesquels je travaille car je suis sur plusieurs environnements différents.(au cas où)


la variable n est déclarée au début du main() et est saisie dès le début, la suite du programme ne se fait pas si n n'est pas un entier.


J'ai cherché sur internet et je ne trouve rien, c'est peut être tout bête, mais je débute dans la programmation et même à 3, on voit pas ce qu'il se passe.

Merci pour votre aide.

4 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Lorsque tu passes un tableau 2D à une fonction, le compilateur doit être en mesure de distinguer la taille des colonnes. Sinon la notation grille[i][j] n'a plus de sens. Voilà pourquoi tu dois donner la taille des colonnes au compilateur dans le prototype des fonctions.
Voici un lien qui explique ceci : http://www.ensta.fr/~enstar/doc/c++/courscpp/Sections/Sect05-B2.html

Néanmoins, si tu connais la taille à la compilation tu peux faire tout simplement :
void MajLig(int n,element grille[][TAILLE], int l, int v) 

Cdlt
1
mony84 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   11
 
comment tu déclares ta variable grille dans main,
tu peux voir le tutoriel sur les pointeurs : https://cpp.developpez.com/cours/cpp/?page=page_6#LVI-B
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
oui, dit nous comment tu initialise grille
0
Ralphy
 
grille est un tableau de struct.

je fais en début de programme
struct element{
int ValeurFinale;
int valposs[] ;
};

et dans le main je fais
element grille[n][n];
0