Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de compilation fichier.

Besoin d'aide pour un Exam

    21 mai 2021 à 20:56:21

    Bonsoir,

    Je code sous Visual Studio et je run mon code directement dans le terminal du logiciel en cliquant sur la flèche en haut à droite de ma fenêtre. Je travaille pour des examens et j'ai des problèmes de compilation de code que mes camarades n'ont pas (je suis sur mac, ils sont sur PC, ça joue peut être).

    Vous trouverez ci dessous l'erreur qui s'affiche. Elle est récurrente à chaque fois que je veux définir une variable en utilisant les {}. 

    Quelqu'un serait-il en mesure de m'aider?

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2021 à 21:02:47

      Salut,

      Montre nous le constructeur de ta classe Point2D. S'il n'est pas prévu qu'elle s'initialise de cette manière, et bien ça ne marchera pas.

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        21 mai 2021 à 21:07:23 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


          21 mai 2021 à 21:11:07

          Bonsoir, Évitez les titres de sujet avec "problème" si vous postez on se doute que vous avez un problème et cela n'apporte aucune information quant au contenu du sujet.

          Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
          Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

          Pour plus d'informations, nous vous invitons à lire les règles générales du forum

          Merci de colorer votre code à l'aide du bouton Code

          Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

          Liens conseillés

          • Partager sur Facebook
          • Partager sur Twitter
            21 mai 2021 à 21:13:26

            Voici le Constructeur
            #include "Point2D.hh"
             
            Point2D::Point2D()
            {
                x= 0; y = 0;
            } 
             
             
            Point2D::Point2D(double a, double b)
            {
                x= a; y = b;
            } 
             
            ostream& operator<<(ostream& o, const Point2D& pt)
            {
                o << pt.x << " " << pt.y;
                return o;
            }

            Et le .hh Si ça peut aider

            #ifndef __POINT2D_HH__
            #define __POINT2D_HH__
             
            #include <iostream>
             
            using namespace std;
             
            struct Point2D
            {
                double x;
                double y;
             
                Point2D();
                Point2D(double a, double b);
            };
             
            ostream& operator<<(ostream & o , const Point2D& pt);
             
            #endif




            • Partager sur Facebook
            • Partager sur Twitter
              21 mai 2021 à 22:29:30

              On voit que tu as un constructeur par défaut, et un constructeur avec 2 paramètres.

              Donc il faut construire comme cela :

              Point res(0,0);

              Si tu veux construire avec une initializer_list (donc des accolades avec des paramètres), il te faudra un constructeur avec une std::initializer_list en paramètre.

              Voir ici :

              https://en.cppreference.com/w/cpp/language/list_initialization

              Après, la syntaxe que je t'ai mise ci dessus marche très bien, tu peux utiliser celle la.



              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                22 mai 2021 à 2:52:25

                Ton point n'a pas l'air d'avoir le moindre invariant. Vire tous les constructeur de ta classe pour en faire un vrai agrégat. Le C++ prendra ensuite le relai pour les générer automatiquement de la bonne façon.

                Et si tu veux vraiment un constructeur par défaut qui met à zéro (*), alors donne une valeur pour les données membre directement dans la définition de la classe

                struct Point {
                    double x = 0.;
                    double y = 0.;
                };

                (*) Personnellement, je préfère aujourd'hui éviter pour ce genre de classe et moi même explicitement mettre à zéro quand je le veux en construisant avec des accolades vides: `Point origin{};` (x et y seront à 0 sans avoir besoin de l'"astuce" précédente)

                PS: il ne faut faire faire de using namespace dans un fichier d'en-tête (i.e. .h, .hpp...). https://cpp.developpez.com/faq/cpp/?page=Les-namespaces#Quand-utiliser-ne-pas-utiliser-using-namespace Ailleurs c'est critiquables et mes amis ne manqueront pas de le faire pour moi. Mais dans les fichiers d'en-tête ce sont une source d'ennuis interminable, et toutes les règles qualité le proscrivent en industrie, et des profs pas trop à la ramasse le sanctionneront avec des points en moins.

                PPS: Ma réponse suppose partiellement le C++11.

                -
                Edité par lmghs 22 mai 2021 à 2:54:50

                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  22 mai 2021 à 13:16:58

                  Merci de ta réponse. 

                  J'aimerai pouvoir utiliser ta première suggestion afin de faire au plus simple (avec les parenthèses) mais ça ne marche toujours pas, j'ai une nouvelle erreur qui s'affiche et je n'arrive toujours pas à la comprendre. 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mai 2021 à 14:11:12

                    ? Ca marche très bien ce que je t'ai donné https://godbolt.org/z/nhj8G1qGq (C++11)

                    EDIT: Avec mise à 0 façon canonique: https://godbolt.org/z/5xvjT13xE et pas de constructeur par défaut qui laisse dans l'état non-initialisé.

                    -
                    Edité par lmghs 22 mai 2021 à 14:12:59

                    • Partager sur Facebook
                    • Partager sur Twitter
                    C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                      22 mai 2021 à 14:57:09

                      Excuse moi je répondais à Fvirtman, je n'avais pas vu ta réponse lmghs, j'éssaie ça de suite
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 mai 2021 à 21:20:13

                        FlorianGirardi a écrit:

                        Merci de ta réponse. 

                        J'aimerai pouvoir utiliser ta première suggestion afin de faire au plus simple (avec les parenthèses) mais ça ne marche toujours pas, j'ai une nouvelle erreur qui s'affiche et je n'arrive toujours pas à la comprendre. 

                        Point res(x,y);
                        
                        pas
                        
                        Point res = (x,y);



                        • Partager sur Facebook
                        • Partager sur Twitter

                        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                          24 mai 2021 à 17:06:40

                          Merci pour cette précision, en revanche le problème persiste mais j'i maintenant une autre erreur
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 mai 2021 à 17:26:20

                            Bonjour,

                            Comme ton compilateur ne reconnait pas la syntaxe, je pense qu'il n'est pas configuré en C++11 ou supérieur (je ne suis pas sur Mac, ni sous Visual studio, je ne sais pas t'en dire plus)

                            Cordialement.

                            -
                            Edité par Dedeun 24 mai 2021 à 17:27:48

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 mai 2021 à 18:01:06

                              Ok ça marche Dedeun, merci pour cette info
                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 mai 2021 à 18:27:36

                                étrange le compilateur voir des accolades au lieu des parenthèses o_O tu as bien réenregistré ton fichier (si ce n'est pas automatique)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Problème de compilation fichier.

                                × 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