Partage
  • Partager sur Facebook
  • Partager sur Twitter

les données d'un std::multiset

C++

Sujet résolu
    3 avril 2019 à 17:35:59

    Bonjour

    voici que depuis plusieurs jours, je cherche à comprendre pourquoi le morceau de code suivant n'affiche pas ce que je voudrais au moment du listing de ce qui est dans le std::multiset.

    Or il y a bien construction par copie au moment du passage de name à la fonction emplace.

    Donc pourquoi quand je fais ma boucle pour afficher ce qui est dans le std::multiset, rien ne s'affiche ?

    Je rappelle que stringg est juste une classe dérivant de std::string et dans laquelle je fais en sorte d'afficher des messages pour m'aider.

    Merci pour votre aide par avance pour comprendre pourquoi quand je fais ma boucle d'affichage , rien nd'apparaît :

    #include <iostream>
    #include <string>
    #include <set>
    #include <chrono>
    #include "stringg.h"
    #include <vector>
    
    
    #define square_macro(x) x*x
    
    std::multiset<stringg> names;
    
    auto log=[](auto&& n, const stringg& str){};
    
    
    void logAndAdd(const stringg& name)
    {
        std::cout<<"entree dans la fonction avec const stringg&"<<'\n';
        auto now=std::chrono::system_clock::now();
        
        std::cout<<"ligne test destruction dans la fun logAndAdd : "<<'\n';
        names.emplace(name);
        std::cout<<"2ème ligne test destruction dans la fun logAndAdd : "<<'\n';
    }
    
    
    int main(){
    
    
    logAndAdd("Patty Dog");
    std::cout<<"après la sortie de logAndAdd"<<'\n';
    
    
    std::cout<<"beginning of the display"<<'\n';
    int i=0;
    for(std::multiset<stringg>::const_iterator it=names.begin();it!=names.end();it++)
    {
        std::cout<<*it<<'\n';
        i++;
    }
    std::cout<<"end of the display "<<i<<" "<<'\n';
    
    }



    -
    Edité par pseudo-simple 3 avril 2019 à 20:41:22

    • Partager sur Facebook
    • Partager sur Twitter
      3 avril 2019 à 23:13:38

      L'erreur est ailleurs. Dans stringg par exemple.

      • Partager sur Facebook
      • Partager sur Twitter
        3 avril 2019 à 23:23:05

        Etant donné que OC est bugué pour mettre du code, je le mets donc ici, brut de décoffrage : ça fait plusieurs jours que ça dure, et maintenant même pour ajouter du code, c'est bugué chez moi. Je ne vois pas où est le problème à priori, puisque stringg dérive de std::string il me semble donc tout à fait normal de pouvoir faire des "std::cout" dessus sans avoir besoin de redéfinir std::cout dessus ?

        #ifndef STRINGG_H

        #define STRINGG_H

        #include <string>

        #include <iostream>

        class stringg : public std::string

        {

            public:

         /*

                template<typename... T>

                stringg(T&&... params);

        */

                stringg(){};

                stringg(const stringg& str);

                stringg(stringg&& str);

                stringg(const char* str);

                stringg& operator=(stringg&& str );

                stringg& operator=(stringg const& str);

                virtual ~stringg(){std::cout<<"destruction d'un string : "<<*this<<'\n';};

        };

        et 

        le cpp :

        #include "stringg.h"

        stringg& stringg::operator=(stringg&& str){

        std::cout<<"affectation par déplacement"<<'\n';

        stringg st =std::move(str);

        std::cout<<"affectation par déplacement"<<'\n';

        return st;

        }

        stringg& stringg::operator=(stringg const & str){

        //*t=str;

        std::cout<<"affectation par copie"<<'\n';

        stringg st=std::move(str);

        std::cout<<"affectation par copie"<<'\n';

        return st;

        }

        stringg::stringg(const stringg& str){std::cout<<"construction par copie : "<<*this<<" "<<str<<" "<<'\n';}

        stringg::stringg(stringg && str):std::string(std::move(str))

        {std::cout<<"construction par déplacement : "<<*this<<" "<<str<<" "<<'\n';}

        stringg::stringg(const char* str):std::string(str){std::cout<<"construction à partir d un littéral : "<<*this<<" "<<" "<<'\n';}

        -
        Edité par pseudo-simple 3 avril 2019 à 23:25:31

        • Partager sur Facebook
        • Partager sur Twitter
          3 avril 2019 à 23:48:26

          • Les implémentations suivantes sont boguées:
          stringg::stringg(const stringg& str)
          stringg& stringg::operator=(stringg&& str)
          stringg& stringg::operator=(stringg const & str)
          

          Modéré par Benzouye : Pas besoin d'être agressif ... Si l'énervement l'emporte, merci de ne simplement pas répondre ...

          -
          Edité par Benzouye 4 avril 2019 à 13:13:18

          • Partager sur Facebook
          • Partager sur Twitter
            4 avril 2019 à 11:54:04 - Message modéré pour le motif suivant : Merci de ne pas commenter mais plutôt de simplement signaler ... Les modérateurs sont là pour ça


            les données d'un std::multiset

            × 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