IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Impl�mentation algorithme colonie de fourmis


Sujet :

C++

  1. #1
    Membre du Club Avatar de midotunez
    Femme Profil pro
    Charg� d'affaire
    Inscrit en
    Octobre 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : Charg� d'affaire

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par d�faut Impl�mentation algorithme colonie de fourmis
    j'ai trouv� le tutoriel de Pierre Schwartz, http://khayyam.developpez.com/articl...es-de-fourmis/, concernant l'algorithme de colonie de fourmis. Apr�s avoir compris comment il fonctionnait j'ai d�cid� de t�l�charger le code source accessible en fin de tutoriel et je n'arrive pas � le compiler.

    J'ai ces erreurs d�tect�es par mon compilateur :
    \main.o:main.cpp|| undefined reference to `problem::problem(int, float, float, float)'|
    main.o:main.cpp|| undefined reference to `antSystem::antSystem(int, problem&)'|


    je travaille avec Code::Blocks 16.01 sous windows 7.
    Merci d'avance.

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Ca, ce n'est pas une erreur du compilateur, mais bien une erreur de ... l'�diteur de liens.

    En gros, le compilateur va g�n�rer le code binaire ex�cutable par le processeur pour chaque fichier *.cpp que tu vas lui donner. Une fois qu'il aura fini ce travail, un autre outil -- appel� �diteur de liens -- va prendre le relais et regrouper tous les fichier g�n�r�s par le compilateur (que l'on appelle "fichiers objet") en un seul ex�cutable final.

    Son but sera de faire correspondre les diff�rents appels qui sont faits aux diff�rentes fonctions aux adresses auxquelles se trouvent effectivement les fonctions en question dans l'ex�cutable.

    Evidemment, pour que cela puisse marcher, il faut qu'il ... dispose du code binaire ex�cutable correspondant � chaque fonction qui est appel�. S'il rencontre l'appel � une fonction pour laquelle il ne dispose pas du code binaire ex�cutable, il n'aura pas d'autre choix que de s'arr�ter sur une erreur de type "undefined reference to <nom de la fonction> ".

    Ici, l'�diteur de liens se plaint de ne pas trouver le code binaire ex�cutable correspondant � au moins deux fonctions (le constructeur de la classe problem et le constructeur de la classe antSystem).

    La raison principale pour laquelle il se trouve dans cette situation est que, pour une raison ou une autre, le compilateur n'a pas pu g�n�rer le fichier objet qui contient ce code binaire ex�cutable. Et cette raison peut arriver dans deux situation:

    La premi�re est que les fichiers cpp qui contiennent l'impl�mentation de cette fonction contenaient une erreur qui a emp�ch� le compilateur de faire son travail. Mais, a priori, il ne semble pas que ce soit le cas, autrement, c'est carr�ment le compilateur qui t'aurait engueul�.

    La deuxi�me raison est que le compilateur ne savait tout simplement pas qu'il devait aussi compiler les fichier ant_system.cpp et problem.cpp Et, g�n�ralement, ca, c'est un probl�me au niveau de la configuration de ton projet, et donc, un probl�me sp�cifique � ton EDI (Environnement de D�veloppement Int�gr�, c'est � dire Code::Blocks, vu que tu nous l'as si gentiment donn� ) .

    Tu pourras d'ailleurs t'en rendre compte en allant du cot� du menu Project->properties et en s�lectionnant l'onglet Build Targets dans la fen�tre qui s'ouvrira : En bas de la fen�tre tu trouveras une liste de fichiers dont le titre est Build target files: ... Si tu y fais un tout petit peu attention, je suis pr�s � parier que le fichier ant_system.cpp et problem.cpp ne font pas partie de la liste. Me tromp�s-je?

    Pour r�soudre ce probl�me, tu dois aller dans le menu project (encore une fois) -> Add files ... s�lectionner les fichiers qui te manquent ( ant_system.cpp et problem.cpp, dans ton cas) et cliquer (bien �videmment) sur Open.

    Cela ouvrira une autre fen�tre dans laquelle tu verra sur la gauche une liste dont le titre est "Select the targets this file should belong to:" et tu verras au minimum les choix "Debug" et "Release". Tu dois veiller � ce que les ces deux cibles soient coch�es (pour ton cas particulier). Tu peux, si ce n'est pas le cas, cliquer sur "Select All". Une fois que les deux cibles sont coch�es, "yapluka" cliquer sur OK.

    Une fois cela fait, tu pourras relancer la compilation et tout devrait se passer beaucoup mieux
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Membre du Club Avatar de midotunez
    Femme Profil pro
    Charg� d'affaire
    Inscrit en
    Octobre 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : Charg� d'affaire

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par d�faut suivi
    bonjour,
    koala01 vous avez totalement raison,bon j ai avancer un peu dans la compilation maintenant j ai un erreur
    D:\implementation\problem.cpp|14|error: no matching function for call to 'std::vector<std::vector<int> >::assign(int&, int)'|
    Avez vous id�e d ou vient cet erreur?
    Images attach�es Images attach�es  

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Pourrais-tu utiliser les balises codes pour afficher du code ? Une grosse image est de loin le pire moyen...
    Ton code n'a aucun sens, tu veux assigner nbCities fois 0 � un vecteur de vecteur. Forc�ment la fonction n'existe pas.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    oui, j'ai essay� de compiler les sources, et j'ai du faire quelque corrections:
    1. inclure le fichier <cstdlib> (pour disposer de rand) dans problem.cpp
    2. modifier la ligne distances.assign(nbCities, 0); en distances.assign(nbCities, std::vector<int>{});
    3. modifier la ligne pheromones.assign(nbCities, 0); en pheromones.assign(nbCities, std::vector<float>{});
    4. activer le support de C++14 (menu Project->build Options : dans l'onglet "Compiler flags, cocher la case "Have Gcc to follow the C++14 ISO C++ language standard")
    5. inclure le fichier <string> dans main.cpp au d�part, je voulais utiliser std::stoi apparu en C++11...
    6. inclure <cstdlib> dans main.cpp


    Note que l'article date de 2006. L'article en lui-m�me est excellent, mais le code est... ancien
    Citation Envoy� par bousk
    Ton code n'a aucun sens, tu veux assigner nbCities fois 0 � un vecteur de vecteur. Forc�ment la fonction n'existe pas.
    A sa d�charge, c'est le code de khayyam, tel que r�cup�r� avec l'archive qui accompagne l'article
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  6. #6
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    L'archive vient d'�tre mise � jour, le code devrait maintenant compiler quelle que soit la norme .

  7. #7
    Membre du Club Avatar de midotunez
    Femme Profil pro
    Charg� d'affaire
    Inscrit en
    Octobre 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : Charg� d'affaire

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par d�faut
    Un grand merci

    Citation Envoy� par koala01 Voir le message
    oui, j'ai essay� de compiler les sources, et j'ai du faire quelque corrections:
    1. inclure le fichier <cstdlib> (pour disposer de rand) dans problem.cpp
    2. modifier la ligne distances.assign(nbCities, 0); en distances.assign(nbCities, std::vector<int>{});
    3. modifier la ligne pheromones.assign(nbCities, 0); en pheromones.assign(nbCities, std::vector<float>{});
    4. activer le support de C++14 (menu Project->build Options : dans l'onglet "Compiler flags, cocher la case "Have Gcc to follow the C++14 ISO C++ language standard")
    5. inclure le fichier <string> dans main.cpp
    6. inclure <cstdlib> dans main.cpp


    Note que l'article date de 2006. L'article en lui-m�me est excellent, mais le code est... ancien

    A sa d�charge, c'est le code de khayyam, tel que r�cup�r� avec l'archive qui accompagne l'article
    merci KOALA , un effort de votre part en d�crivant soigneusement les �tapes n�cessaires pour fonctionner le code:

  8. #8
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Note que l'article date de 2006. L'article en lui-m�me est excellent, mais le code est... ancien

    A sa d�charge, c'est le code de khayyam, tel que r�cup�r� avec l'archive qui accompagne l'article
    Le std::vector � l'�poque n'avait pas son constructeur explicite, ce qui permettrait une telle syntaxe ?
    Ici on serait en pr�sence d'un resize donc.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  9. #9
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Bousk Voir le message
    Le std::vector � l'�poque n'avait pas son constructeur explicite, ce qui permettrait une telle syntaxe ?
    Ici on serait en pr�sence d'un resize donc.
    Va savoir quel compilateur il a utilis� � l'�poque...

    Si ca se trouve, il utilisait Vc++6 ou un autre, et la syntaxe utilis�e faisait partie des extensions que son compilateur proposait
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. Impl�mentation algorithme colonie de fourmis
    Par yannou63360 dans le forum C++
    R�ponses: 10
    Dernier message: 17/06/2015, 19h46
  2. Algorithme colonie de fourmis API
    Par Aymanito dans le forum Algorithmes et structures de donn�es
    R�ponses: 1
    Dernier message: 10/05/2011, 23h21
  3. R�ponses: 2
    Dernier message: 05/07/2010, 10h37
  4. Algorithme colonies de fourmis .Le plus court chemin
    Par momento85 dans le forum Algorithmes et structures de donn�es
    R�ponses: 1
    Dernier message: 03/04/2010, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo