Bonjour,
J'utilise Dev C++ et en voulant compiler mon programme (pas encore fignolé) le compilateur (après quelques autres tentatives et résolutions d'erreurs de débutants) me met très exactement:
multiple definition of 'choix_1'
first define here
Id returned 1 exit status
<adresse de makefile.win> [Built Error] ["Sudoku]Error1
Je me demande pourquoi il me dit first define here sans numéro de ligne déjà, mais après avoir changé le nom à 2 endroits seulement (la définition et l'appel), la compilation plante encore pour la même raison (mais avec le nom de la fonction changé!). Si c'est une erreur syntaxique, voici les utilisation du nom de la fonction et le #include du fichier concerné, aussi j'ai utilisé le #define comme écrit:
Cette erreur me paraît encore plus incompréhensible du fait lorsque je déclare la fonction dans le fichier main.cpp en gardant le même nom, la compilation se passe sans problême. Cela m'a fais croire à une erreur simple et qu'il fallait malgrès l'include déclarer la fonction (ce qui n'est pas très logique si on se tient au fait que le compilateur a déjà lus la définition de la fonction) et si je change une ligne (car le code n'est pas parfait au début pour le menu) et que je remets à compiler, il me remet exactement la même erreur, quoique justifiée maintenant, et si j'efface la déclaration en trop, l'erreur reste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include"choix_un_NbrGrillesMax.cpp" choix_1(); //dans le fichier concerné #ifndef untruk //pour éviter justement toute déclaration multiple #define untruk void choix_1() { // définition de la fonction } #endif
Aussi lorsque j'ai commencé à coder ce programme, cette fonction était non pas void mais int, et après avoir changé, en allant dans le gestionnaire des fonctions, variables et structures-classes, je me rends compte que le compilateur reconnait encore la fonction comme renvoyant un int, et me signale pour cela une erreur car la fonction n'a pas de variable où renvoyer la valeur de la fonction... Après je ne sais plus quelles manipulations, j'ai réussi à effacer ce double fantôme.
Enfin au début du codage, j'avais utilisé un fichier entête pour main, mais comme main en elle-même n'avait pas beaucoup de variables (une) et n'était qu'un menu, j'ai enlevé l'include et le fichie du projet, en déclarant la variable dans main.cpp donc. Quelle n'est pas ma surprise de voir qu'il y a une déclaration éxédentaire de la variable! Le compilateur continuait à inclure le fichier entête malgrès que je l'eus supprimer du projet et qu'il n'y avait aucune utilisation. Le fichier en question était resté dans le répertoire où j'avais rangé le programme, et il était intacte, et le compilateur s'en servait et le reconnaisait. Ce n'est qu'en le supprimant de l'ordinateur (sans passer par la corbeille) que j'ai pus avoir la paix.
Je vous assure que je n'invente rien, et que tout ceci (qui ressemble à un film d'angoisse) est vrai et s'est passé! Est-ce Dev C++ le problême? Est-ce un oubli ou une erreur syntaxique de ma part? Sont-ce des fantômes de la machine qui hantent mon pc?
La suite au prochain épisode(ce n'est toujours pas une invention de ma part!)
P.S. : ce programme doit servir à calculer le nombre de grilles de sudoku possibles, avoir une idée de l'ordre de grandeur pour voir, car même si on peut se dire qu'il y en a infiniment, il n'empêche que les obstacles s'imposant rendent difficile l'éciture d'une seule grille par un humain, d'où l'utilité du calcul de masse, bien bourrin.
Aussi je suis débutant (encore et toujours à lire des tutos et ce que je trouve depuis 1 an) et mes programmes ont un facheuse tendance à ne jamais réussir à la première compilation et à me laisser tout bête pendant une semaine au moins. Alors je ne serais pas étonné si ce n'est qu'un point virgule ou une bêtise de ce genre... -_-
P.P.S. : Désolé pour la taille du message mais le problême vaut bien ça.
Partager