operateur << avec Visual Studio

a marqué ce sujet comme résolu.

Salut tout le monde

j’ai un problème avec la surcharge de mon operateur« sur visual studio car ce dernier détecte une erreur mais que n’arrive pas à résoudre

voici mon fichier .h:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <utility>
#include <string>
#include <ostream>



class X {

private:
    std::string m_mot;
    int* m_ptr;

public:
    X(): m_mot{"mot Inconnue."},m_ptr{new int(0)}
    {}
    X(std::string mot, int ptr): m_mot{mot},m_ptr{new int(ptr)}
    {}
    X(X const & copie): m_mot{copie.m_mot},m_ptr{new int(*(copie.m_ptr))}
    {}

    X& operator=(X const & copie) {

        if (this != &copie) {
            m_mot = copie.m_mot;
            delete m_ptr;
            m_ptr = new int(*(copie.m_ptr));

        }
        return *this;
    }

    X(X&& source): m_mot{std::move(source.m_mot)}, m_ptr{new int(*(std::exchange(source.m_ptr,nullptr)))}
    {}

    X& operator=(X&& source) {

        if (this != &source)
        {
            m_mot = std::move(source.m_mot);
            m_ptr = std::exchange(source.m_ptr, nullptr);

        }
        return *this;
    }

    void swap(X autre) {
        std::swap(m_mot, autre.m_mot);
        std::swap(m_ptr, autre.m_ptr);
    }

    void afficher(std::ostream flux) {
        flux << "\n\nMot: " << m_mot << "\nValeur: " << *m_ptr << std::endl;
    }

};

std::ostream&  operator<<(std::ostream flux1, X const a) {

    a.afficher(flux1);
    return flux1;
}

désolé pour le pointeur nue car c’est juste pour me facilité à comprendre la semantique de mouvement :)

Merci pour votre aide

+0 -0

Bonjour,

ton code est peu lisible, je te conseille d’utiliser les balises de codes faites pour ça.

```cpp

` ``


Je ne sais pas si c’est le formatage, mais ton symbole n’est pas valide.


Pourquoi tes paramètres sont : ostream, const X ? Tu devrais plutôt avoir : ostream&, const X& ; Le passage d’objets ne te sera guère utile.

Déjà première erreur ta méthode afficher doit être constante car ton objet a est constant . En clair ça devrait donner ça :

1
2
3
4
    void afficher(std::ostream flux) const 
    {
        flux << "\n\nMot: " << m_mot << "\nValeur: " << *m_ptr << std::endl;
    }
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte