Partage
  • Partager sur Facebook
  • Partager sur Twitter

Porblème de compréhension POO

Mais beaucoup d'autre chose a venir...

    14 mai 2008 à 18:51:53

    Salut a tous!

    Je suis actuellement en alternance, étudiant et salarié... La misère quoi! ^^
    Bref il faut que je maitrise le C++ assez rapidement pour développer une interface pour un logiciel de traitement d'image.
    Pour le moment je suis capable de faire ni l'interface ni le traitement d'image. :D:o:(
    En cour (et ici!! sa à été très profitable!!) j'ai déjà vue le C se qui devrai me permettre d'exploiter des librairie de traitement d'image déjà existante.
    Le problème se pose pour l'apprentissage du C++ et actuellement les classes :D . J'ai réalisé en C un jeux du type pendu, et pour m'entrainer je cherche à l'adapter en C++. Vue qu'il y a des chaines de caractère dans le pendu version C je me suis dit facil en C++. FAUX!!:D Et bien en faite je bloque:
    Je cherche a faire une fonction qui me renvoi un mots pioché au hasard dans une liste ==> se que j'ai eu a réaliser par le passé en C mais que je parvient pas a réaliser en C++.
    Doit-je utiliser une classe pour réaliser cette prouesse? Une fonction qui renvoie un objet de type string (sa existe??? :o )???

    En se qui concerne la fonction, l'objet de type string serai le mot aléatoire pioché dans la liste. Mais ouvre-ton un fichier comme en C, en C++? (C'est à dire des pointeur ou des référence?).

    Brèf je me pose plein de question je ne sait pas par ou commencer. S'il y avait des personnes de bon conseille pour me guider et "chopper" les bon réflexes du programmeur. Si besoin est je posterai le code de ma fonction C.

    J'utiliserai abondamment se poste si d'autre problème se pose en rapport direct avec mon projet.

    Et bien sur avant toute chose un grand merci a ceux qui m'aiderons. Et je n'hésiterai pas a faire partager les sources du future programme aceux qui serait intéresser, si il vient au monde un jour!!! :)
    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2008 à 19:01:22

      pour les fichiers => il y a un tuto non-officiels sur le site
      pour renvoyer une std::string => c'est comme avec un int
      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2008 à 11:07:45

        Pour les string en C++ je te conseille de faire une recherche de std::string dans la FAQ C++
        Tu verra c'est beaucoup plus pratique que les char*

        Pour stocker ton paquet de string, en C++ tu as des vecteurs, ca t'économise la gestion mémoire. Je te conseille de faire une recherche sur std::vector.

        Pour renvoyer une string : std::string Pioche(){...}

        Pour commencer le C++ je te conseille de commencer par comprendre les paradigmes de la programation objet (classes héritage encapsulation virtualité template...) avant de commencer à cracher du code. Tu as un bon tuto pour débuter en C++ sur ce site, ensuite je te conseille de lire la FAQ C++
        • Partager sur Facebook
        • Partager sur Twitter
          15 mai 2008 à 11:59:43

          Re;

          J'ai réussi a ouvrir un fichier a récupérer des les chaines que je voulais dedans :)
          Mon problème c'est le prototype de la fonction. Je veux quelle me renvoi une chaine de caractère, donc : string.

          Voila le prototype actuelle de ma fonction:

          Citation : Pas de titre

          int MotAleatoire ()



          Dans mon main je l'appelle de cette manière:

          Citation : Pas de titre

          string MotAl;

          MotAl = MotAleatoire ();



          Mais j'ai des erreur de compilation

          Citation : Pas de titre

          undefined reference to `MotAleatoire()'



          D'après l'erreur je suppose que mon prototype n'est pas bon...
          Je voudrais savoir aussi si la compilation séparer au niveau syntaxe fonctionnai de la même manière que pour le C.

          A aussi es-ce qu'une fonction peux recevoir en paramètre un string et ne rien renvoyer, un prototype qui rencemblerai à ça:

          Citation : Pas de titre

          void fonction(string MotAl);

          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2008 à 12:04:08

            Citation : natrio

            Voila le prototype actuelle de ma fonction:

            Citation : Pas de titre

            int MotAleatoire ()



            Dans mon main je l'appelle de cette manière:

            Citation : Pas de titre

            string MotAl;

            MotAl = MotAleatoire ();



            Problème de type : Ta fonction renvoie un int et dans ton main tu déclares string motAl

            string MotAleatoire ();
            



            Citation


            Mais j'ai des erreur de compilation

            Citation : Pas de titre

            undefined reference to `MotAleatoire()'




            As-tu inclus le fichier où est définie cette fonction ?

            Citation


            A aussi es-ce qu'une fonction peux recevoir en paramètre un string et ne rien renvoyer, un prototype qui rencemblerai à ça:

            Citation : Pas de titre

            void fonction(string MotAl);



            Bien sûr, pourquoi pas ?

            http://www.siteduzero.com/tuto-3-5395- [...] mer-en-c.html
            • Partager sur Facebook
            • Partager sur Twitter
              15 mai 2008 à 12:34:59

              Re

              Pour ledemonboiteux j'ai lu ce tutoriel jusqu'a la première partie sur la création des classes. Jusqu'à se point j'ai compris et je ne le maitrise pas tout à fait. C'est pour sa avant de me jeter corps et âme dans la POO j'essay de bien maitriser les variable référence etc... L'objective de la "traduction" c'est de partir d'un code C vers du C++. J'utilise les classes existante, je n'en créer pas de supplémentaire et il est clair que j'utilise la classe string, et d'autre...

              Je lirai de manière approfondi la FAQ C++ après la traduction de mon code pour consolider mes acquis, mais c'est un support que j'utilise déjà.

              Pour en revenir a mon code pour éviter (pour le momment) la compilation séparé j'ai réalisé mon code comme suit:
              #include <iostream>
              #include <string>
              #include <fstream>
              //#include "fonction.h"
              
              using namespace std;
              
              void MotAleatoire (string MotAl);   //==> prototype de ma fonction qui me renvoi le premier mot de la liste.
              
              int main()//Fonction principal affiche le mot piocher dans la liste
              {
                  string MotAl;
              
                  MotAleatoire (MotAl);
              
                  cout << MotAl << endl;
              
                  return 0;
              }
              
              void MotAleatoire (string MotAl){// pour le moment renvoi le premier mot de la liste
                  ifstream fichier("mots.txt", ios::in);
              
                  if (fichier){
                        getline(fichier, MotAl);
                      //cout << MotAl << endl;
                  }
              
                  else{
                      cerr << "Problème ouverture fichier!" << endl;
                  }
              }
              


              Donc se programme compile et se lance mais ne m'affiche rien. Si j'affiche dans ma fonction MotAleatoire sa marche. J'en conclu que ma fonction MotAleatoire est bien appelé par le main mais ne modifie pas mon objet MotAl.

              Je veux que ma fonction ne renvoi rien mais modifie directement MotAl. En C il faut passer par les pointeur mais la vue que c'est un objet de type string je ne sait pas comment faire.
              • Partager sur Facebook
              • Partager sur Twitter
                15 mai 2008 à 12:53:40

                Par référence

                void MotAleatoire(string &motAl);
                


                Appel:
                MotAleatoire (MotAl);
                


                Tout ça est dans le cours de ce site.

                PS: Utilise la balise code

                EDIT: Tu peux quand même utiliser un pointeur de string en C++
                • Partager sur Facebook
                • Partager sur Twitter
                  15 mai 2008 à 16:03:41

                  Merci L.O.S.T effectivement c'était bien dans le cours (Chapitre : Nouveautés pour les variables, les références) preuve que j'ai lu voir survolé le cours bien trop vite!

                  Mon code fonctionne lorsque je le met dans un seul fichier, maintenant je passe par un header.
                  Mon prototype dans le h:
                  void MotAleatoire (std::string &MotAl);
                  


                  je l'appelle de cette manière dans mon main:
                  string MotAl;
                  MotAleatoire (MotAl);
                  


                  Et la c'est le drame:

                  Citation : Le compilateur

                  undefined reference to `MotAleatoire(std::string&)'



                  Je voi donc cause possible:
                  -Mon prototype dans le fichier .h nest pas bon.
                  -Sinon c'est la référence qui est mal déclaré et je ne voi pas comment résoudre se problème.

                  P.S: j'ai trouver la balise code!! :D

                  EDIT : j'ai trouvé mon erreur. En fait les deux possibilité évoqué plus haut ne sont pas bon et mon code est correct. Utilisant Code::Bocks, lorsque j'ai inclus mes fichiers (ex: fichier h, etc...) il faut semble-t'il cocher debug et release. Ne l'ayant pas fait au moment de l'importation il faut le faire après. (En cliquant droit sur sur le nom du projet dans le volet de gauche (management), ==> Propriété et dans l'onglet build targets on sélectionne les fichier devant entré dans en compte pour le debug et le release.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Porblème de compréhension POO

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown