Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur C3849

Sujet résolu
    16 août 2022 à 19:23:07

    bonjour, je suis désolé car je sais que je sollicite beaucoup le forum de open classroom ces temps ci mais il y a une erreur que je ne comprend pas. L'ereure est apparue quand j'ai ajouté TestVoyelles dans la création du map playerkill.

    erreur C3849: un appel de style fonction sur une expression de type 'const TestVoyelles' perdrait les qualificateurs const et/ou volatile pour l'ensemble des 2 surcharges d'opérateur disponibles

    Voici mon code

    main.cpp

    #include"operateur.hpp"
    #include<vector>
    #include<iostream>
    #include<string>
    #include<functional>//permet de faire des chose basique(comme l'addition) avec les foncteurs sans devoire créé de méthode
    #include<map>
    using namespace std;
    int main()
    {
        vector<int> tab(100, 0); //Un tableau de 100 cases valant toutes 0
        string a;
        cin>>a;
        string::iterator b = a.begin();
        TestVoyelles foncteur;
        
    
        Remplir f(0);
    
        for (vector<int>::iterator it = tab.begin(); it != tab.end(); ++it)
        {
            *it = f(); //On appelle simplement le foncteur sur chacun des éléments du tableau
            cout << *it << endl;
        }
    
        if (foncteur(a))
            cout << "contient une voyelle" << endl;
        else
            cout << "ne contient pas de voyelle" << endl;
    
        plus<int> ffunctional;    //On déclare le foncteur additionnant deux entiers
        int nb1(2), nb2(3);
        cout << nb1 << " + " << nb2 << " = " << ffunctional(nb1, nb2) << endl; //On utilise le foncteur comme s'il s'agissait d'une fonction
    
        map<string, int,TestVoyelles> playerkill;//on a créé un operateur pour qu"il ne class plus dans l'ordre alphabetic mais du plus long prenom
                                    //au plus petit
        playerkill["squezie"] = 3;
        playerkill["altrastorique"] = 12;
        playerkill["codebullet"] = 7;
    
        for (map<string, int>::iterator mapiter = playerkill.begin(); mapiter != playerkill.end(); ++mapiter)
            cout << mapiter->first << ": " << mapiter->second << " kill" << endl;
    
        return 0;
    }

     operateur.hpp

    #ifndef DEF_OPERATEUR
    #define DEF_OPERATEUR
    
    #include<string>
    
    class Remplir {
    public:
        Remplir(int i)
            :m_valeur(i)
        {}
    
        int operator()()
        {
            ++m_valeur;
            return m_valeur;
        }
    
    private:
        int m_valeur;
    };
    
    class TestVoyelles
    {
    public:
        
        bool operator()(std::string const& chaine) const
        {
            for (int i(0); i < chaine.size(); ++i)
            {
                switch (chaine[i])   //On teste les lettres une à une
                {
                case 'a':        //Si c'est une voyelle
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                case 'y':
                    return true;  //On renvoie 'true'
                default:
                    break;        //Sinon, on continue
                }
            }
            return false;   //Si on arrive là, c'est qu'il n'y avait pas de  voyelle du tout
        }
        bool operator()( std::string const& a, std::string const& b)
        {
            return a.length() < b.length();//on aurai aussi pus utilisé size mais size donne la taille dans la mémoire des éléments
        }                                  //alors que length donne le nombre de lettre/symbole/ect...
        
    };
    #endif


    Merci beaucoup d'avance à tout se qui m'aideront





    -
    Edité par altrastorique 16 août 2022 à 19:26:22

    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2022 à 21:10:14

      Il y en a pas un peu trop dans ta map ligne 34 ?
      • Partager sur Facebook
      • Partager sur Twitter
      ...
        16 août 2022 à 21:11:03

        Pourquoi il y a pas de "const" à la fin de la ligne 45 de operateur.hpp ?
        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          17 août 2022 à 8:05:51

          • Utilise les for-range pour itérer un vecteur
          • Code en anglais
          • Manque quelques const
          • Tu peux initialiser une map directement quand tu la déclares avec {}

          -
          Edité par markand 17 août 2022 à 8:06:12

          • Partager sur Facebook
          • Partager sur Twitter

          git is great because Linus did it, mercurial is better because he didn't.

            17 août 2022 à 10:44:45

            J'ai rajouté le const à la ligne 45 de operateur.hpp et tout c'est mit à marcher.

            Merci beaucoup à vous tous.

            Markand j'ai essayé d'initialisé map comme ça:

             map<string, int, TestVoyelles> playerkill{"squezie" = 3, "altrastorique" = 12};

            mais ça n'a pas marché

            -
            Edité par altrastorique 17 août 2022 à 10:45:17

            • Partager sur Facebook
            • Partager sur Twitter
              17 août 2022 à 11:55:57

              map<string, int> playerkill{"squezie" = 3, "altrastorique" = 12};
              ca serait plutot comme ça. Tu ne peux pas avoir trois éléments dans les paramètres template de ta map
              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2022 à 12:42:45

                Lis un cours à jour, tu verras toutes les syntaxes du C++11, C++14, C++17 et C++20.
                • Partager sur Facebook
                • Partager sur Twitter

                git is great because Linus did it, mercurial is better because he didn't.

                  17 août 2022 à 13:34:23

                  ThibaultVnt a écrit:

                  map<string, int> playerkill{"squezie" = 3, "altrastorique" = 12};
                  ca serait plutot comme ça. Tu ne peux pas avoir trois éléments dans les paramètres template de ta map

                  Si, on peut avoir un foncteur pour changer l'ordre de tri de la map.

                  Par contre l'initialisation, ça serait plutôt :

                      map<string, int, TestVoyelles> playerkill {{"squezie",3}, {"altrastorique",12}, {"codebullet", 7}};




                  • Partager sur Facebook
                  • Partager sur Twitter
                  ...
                    17 août 2022 à 18:14:34

                    Merci ThibaultVnt. 

                    Et pour répondre à Markand je finis le cour de open classroom et après j'attaque ce proposé par zeste de savoir

                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 août 2022 à 19:59:51

                      Non ne le finis pas, laisse tomber tout de suite. Il t'apprendra rien d'intelligent à part des conneries obsolètes.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      git is great because Linus did it, mercurial is better because he didn't.

                        18 août 2022 à 11:03:04

                        j'ai regardé le cours de zeste de savoir et il dise les mêmes chose que celui de open classroom. Par contre il propose ensuite des cours sur la RAII

                        la sémentique de mouvement et d'autre chose que je pourrai voir après.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 août 2022 à 11:11:11

                          Tu as l'impression qu'ils disent la même chose parce que tu es débutant et que tu n'as pas le recul pour voir les (énormes) différences entre les deux cours.

                          Tu devrais croire les gens expérimentés de ce forum, ils ne décrient pas unanimement le cours d'OC sans bonnes raisons. J'ai terminé le cours d'open classroom quand j'ai débuté et quand il était encore plus complet qu'aujourd'hui. Je l'ai vraiment regretté, je me suis rendu compte trop tard des bétises qu'il apprenait, des mauvais réflexes qu'il donnait et je peux t'assurer que c'est compliqué d'abandonner les mauvaises habitudes qu'on a appris en premier pour ensuite se remettre à jour.

                          Tu fais ce que tu veux, mais tu ne te rendras pas service si tu continues le cours de ce site et quand tu t'en rendras compte le mal sera déjà fait

                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 août 2022 à 12:43:05

                            Bon ok tu m'as convaicue, maintenant j'attaque le cours de zeste de savoir. Parcontre en regardant leur cours j'ai eu l'impréssion qu'ils apprennent moin de chose sur la STL, est se voulu parcequ'il y beaucoup de chose plus utilisé de nos jours?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 août 2022 à 15:30:42

                              Le cours de zeste de savoir ne peut pas te donner 1% de la STL, il permet de connaître un minimum. C'est grand la STL. Je fais du C++ depuis plus de 30 ans et je peux me vanter de bien en connaître un quart, le reste est plus flou pour moi. Pour plus d'info, il faut impérativement utiliser la doc.

                              Quant au tutorial d'Openclassrooms non seulement il en indique nettement moins, mais il exclût les plus vitales à connaître et il y a des erreurs sur celles indiquées

                              • Partager sur Facebook
                              • Partager sur Twitter

                              En recherche d'emploi.

                                19 août 2022 à 13:21:42

                                Merci. Et j'ai commencé le cours de zest de savoir et effectivement il donne des meilleurs réflexe genre écrire int nombre{3}; à la place de

                                int nombre = 3; Du coup Merci beaucoup

                                • Partager sur Facebook
                                • Partager sur Twitter

                                erreur C3849

                                × 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