[C++] Pointeurs et valeurs

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Le C++ étant plus ou moins rétrocompatible avec le C, pourquoi ne peut-on pas écrire a->value à la place de *(a.value) ?

Plus concrètement, je ne comprends pas l’erreur de compilation à la ligne 39 :

#include <iostream>

using std::cout;
using std::endl;

class Entier2
{
public :

    int* value;

    explicit Entier2(int val = 10) {
        value = new int(val);
    }
    
    ~Entier2()  {
        delete value;
    }
    
    // Constructeur par copie
    Entier2(const Entier2& original) {
        value = new int(*original.value);
    }
    
    // Affectation par copie
    const Entier2& operator=(const Entier2& original) {
        if (this != &original)
            *value = *original.value;
        return *this;
    }
};


int main()
{
    Entier2 a(20);
    
    cout << *(a.value) << endl;
    cout << a->value << endl;   // error: base operand of ‘->’ has non-pointer type ‘Entier2’
    
    return 0;
}

Merci et joyeuses fêtes ! :magicien:

Plus ou moins sur le même thème, je ne comprends pas pourquoi le mot-clef const en fin de ligne 19 est de trop dans ce code :

#include <iostream>

using std::cout;
using std::endl;
using std::ostream;

class Entier {
    int value;

public :

    explicit Entier(int val = 10) : value(val) {}
    
    void print(ostream& out = cout) const {
        out << value;
    }
};

ostream& operator<< (ostream& out, const Entier& e) const {
    e.print(out);
    return out;
}

int main() {
    Entier a(42);

    cout << a;
    return 0;
}

test.cpp:19:53: error: non-member function ‘std::ostream& operator<<(std::ostream&, const Entier&)’ cannot have cv-qualifier

Pour moi, la fonction ne modifie pas l’objet courant, elle se contente de l’afficher.

Quel objet courant ? Lis bien l’erreur. non-member function cannot have cv-qualifier.

Ce n’est pas une fonction membre. Donc elle ne peut pas modifier les attributs de l’objet courant.

+0 -1
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