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 :

Problème avec les vector


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 23
    Points
    23
    Par défaut Problème avec les vector
    Bonjour à tous,

    Je commence mon initiation au C++ avec le livre de Bjrane Stroustrup :
    "Programmation, principes et pratique en c++"

    Je travaille sur Dev C++ et je me heurte à un problème. Pour ceux qui connaissent, c'est au chapitre 12. Lorsqu'on aborde la programmation graphique.

    J'ai téléchargé les fichiers ici :
    http://www.stroustrup.com/Programming/Graphics/

    Ensuite, j'ai rajouté le package fltk 1.1.9 via le gestionnaire de package de Dev C++.

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "Graph.cpp"
    #include "Simple_window.cpp"
     
    int main(){
     
        using namespace Graph_Lib;
     
        Point tl(100, 100);
     
        Simple_window win(tl, 600, 400, "Canvas");
     
        win.wait_for_button();
     
        return 0;   
    }
    Mais, quand je veux compiler, je reçois ces erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    9 C:\Users\kajan\Documents\c++\graphics\Graph.cpp In file included from ../graphics/Graph.cpp 
    141 C:\Users\kajan\Documents\c++\graphics\Graph.h expected `,' or `...' before '&' token 
    141 C:\Users\kajan\Documents\c++\graphics\Graph.h ISO C++ forbids declaration of `Vector' with no type 
    142 C:\Users\kajan\Documents\c++\graphics\Graph.h expected `,' or `...' before '&' token 
    142 C:\Users\kajan\Documents\c++\graphics\Graph.h ISO C++ forbids declaration of `Vector' with no type 
     C:\Users\kajan\Documents\c++\graphics\Graph.cpp In function `bool Graph_lib::line_segment_intersect(Point, Point, Point, Point, Point&)': 
    130 C:\Users\kajan\Documents\c++\graphics\Graph.cpp [Warning] converting to `int' from `double' 
    131 C:\Users\kajan\Documents\c++\graphics\Graph.cpp [Warning] converting to `int' from `double' 131 C:\Users\kajan\Documents\c++\graphics\Graph.cpp At global scope: 
    237 C:\Users\kajan\Documents\c++\graphics\Graph.cpp redefinition of `Graph_lib::Circle::Circle(Point, int)' 
    287 C:\Users\kajan\Documents\c++\graphics\Graph.h `Graph_lib::Circle::Circle(Point, int)' previously defined here 
    245 C:\Users\kajan\Documents\c++\graphics\Graph.cpp redefinition of `Point Graph_lib::Circle::center() const' 
    291 C:\Users\kajan\Documents\c++\graphics\Graph.h `Point Graph_lib::Circle::center() const' previously defined here 
     C:\Users\kajan\Documents\c++\chapitre12\Makefile.win [Build Error]  [../graphics/Graph.o] Error 1

    J'ai beau me casser la tête, je vois pas d'où peux venir le problème. Surtout que là l'erreur est signalé sur les fichiers fournis, donc j'ai pas à les toucher normalement.

    Merci d'avance.

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    En effet tu ne devrais pas avoir à toucher les fichiers qui sont forunis, vérifie néanmoins sur le site du livre/de l'éditeur, si il n'y a pas un errata/une note qui va dans le sens d'erreur dans les codes d'exemple et les codes des bibliothèque à utiliser.

    Sinon, je te conseille de changer d'IDE, à ma connaisance Dev C++ est vieux et plus maintenue à jour, normalement l'IDE n'influe pas sur les erreurs, mais si le compilateur que tu utilises a été installé avec l'IDE il est possibile qu'il soit aussi vieux et produisent des erreurs qui ne devrait pas en être.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Salut,

    Vérifie que tu n'ai pas fait d'erreur dans un de tes .h (typiquement le ; de fin de déclaration de classe). Des fois l'erreur se propage et le compilo t'indique une erreur dans un fichier qui n'a rien à voir.
    Imaginons le cas suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "MaClass.h" // Un fichier a toi
    #include <Graph.h> // un fichier de ta lib externe
     
    int main() 
    {
      return 0;
    }
    MaClass.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class MaClass
    {
     
    } // <- la j'oubli le ; de fin de class
    Le compilo trouvera une erreur dans Graph.h. Très vicieux
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    J'ai jeté un œil rapide au code, et je dois avouer que j'ai moi aussi des doutes. On dirait que Bjarne a mis à jour une nouvelle version, mais a oublié de mettre à jour certains fichiers (du moins pour les erreurs "previously defined here"), ce qui fait qu'il y a incohérence.

    Je ne peux pas en dire plus sans regarder plus sérieusement, ce que je risque d'avoir du mal à faire ce début de semaine... J'espère que ça ne va pas te bloquer...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut,

    pour revenir à ton IDE, je te propose d'utiliser Code::Blocks qui est plus récent que DevC++.

    Sinon, je suis étonné que du fasses un include d'un .cpp. Normalement on fait un include d'un .h

    Bon courage

  6. #6
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Je suis au même stade que toi dans le livre, et effectivement, il doit y avoir des erreurs dans les .h et .cpp.
    Je les ais corrigées en remplaçant vector par Vector_ref à la ligne 140 et 141 du fichier Graph.h
    De plus, à la ligne 185 de Graph.h et 235 de Graph.cpp, il y a une double définition de Circle::Circle(.....). Il suffit d'en enlever une des 2.

    Maintenant, je n'ai plus d'erreur de compilation. Le problème se situe après.
    Lorsque que je lance la commande make fournie sur le site, le fichier construit un fichier libbookgui.a (donc un fichier bibliothèque si je ne me trompe pas).
    Dans ce .a, il y a d'inclus tous les .o de tout les fichiers Graph, Simple_Window, Window, etc... y compris le .o de mon propre code.

    Mais maintenant, comment je créer l'exécutable ?

    Si je tape la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -o monprog -llibbookgui
    J'ai comme réponse:
    /usr/bin/ld: cannot find -llibbookgui
    collect2: ld returned 1 exit status

    Là, je suis un peu bloqué.

  7. #7
    Invité
    Invité(e)
    Par défaut
    L'option -l rejoute automatiquement le prefixe lib, c'est à dire que pour lier la bibliothèque libXXX.a, il suffit d'ajouter -lXXX (et non -llibXXX). Dans ton cas il faudrait lancer la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -o monprog -lbookgui

  8. #8
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    bonjour Joe Dralliam et merci de ta réponse

    malheureusement, le résultat reste le même avec ta syntaxe.
    Je ne comprends pas le problème.

    pour préciser le message de retour est :
    /usr/lib/ld: cannot find -lbookgui

    c'est bizarre qu'il renvoie -l... et pas simplement cannot find bookgui, non ?

  9. #9
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    bon, après plusieurs investigations, je me réponds à moi même.

    Il semble que le code fournie dans les fichiers du livre ne soit pas correct.
    la syntaxe de compilation après make serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -L/mon/path/de/dev -lbookgui -o monprog
    où bookgui est la lib générée par le makefile.

    A la suite de ce format de compilation, la lib est correctement trouvée, mais avec environ 180 lignes de "undefined reference to..."
    Bon, ce n'est certainement pas d'une grande aide tout cela, mais si ça peut éviter de patauger trop longtemps, c'est déjà ça.

    Il semble qu'au chapitre suivant, les classes des fichier du livres soient passée en revue. Peut être que cela permettra de corriger des choses.
    Le livre reste pour moi une référence dans le genre de par son accessibilité.

    Si vous avez d'autres infos...
    Bon courage à tous.

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Suis-je le seul à, dés le départ, m'étonner des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "Graph.cpp"
    #include "Simple_window.cpp"


    Erreur de copier / coller

    Erreur de copie du code

    Erreur dans le bouquin (ce serait quand même étonnant, une si grosse erreur )
    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

  11. #11
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    Heu non Koala01, tu n'es pas le seul, mais je me suis plus intéressé au dysfonctionnement en général.

    C'est une erreur de recopie du code du livre qui lui, indique bien
    Pour le reste, il semblerait bien que le code ne fonctionne pas.

  12. #12
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    Bonjour à tous,

    Pour Kajan, je ne sait pas où tu en es de tes recherches. De mon coté, j'ai enfin pu compiler, linker et exécuter sans erreur avec les fichier de B Stroustrup.
    J'ai utiliser ces commandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ make
    $ g++ -lfltk -lfltk_images -o monprog -L. -lbookgui
    make produit la librairie statique libbookgui.a avec le .o de ton fichier de code
    ensuite on link avec la librairie fltk et fltk_image et sans oublier '-L.' (avec le point) pour indiquer que la librairie qui suit est dans le répertoire courant puis -lbookgui pour notre lib.

    Le code de base fonctionne, reste à tester la suite, mais c'est déjà pas mal.

    Salutations et tiens moi au courants.
    Bringer

Discussions similaires

  1. Problème avec les vector
    Par terminator59140 dans le forum C++
    Réponses: 8
    Dernier message: 03/06/2009, 23h21
  2. problème avec les vector
    Par cdm1024 dans le forum SL & STL
    Réponses: 8
    Dernier message: 15/04/2008, 10h57
  3. [Debutant] problème avec les vectors
    Par julien.63 dans le forum Langage
    Réponses: 6
    Dernier message: 21/12/2007, 22h53
  4. Problème avec les vector
    Par lostchina dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/03/2007, 10h51
  5. [gsoap] Problème avec les std::vector
    Par LePhasme dans le forum SL & STL
    Réponses: 1
    Dernier message: 25/04/2006, 11h46

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