Oppure

Loading
08/05/09 10:36
lorenzo
Ok il titolo non rende molto bene l'idea della mia domanda...ma mi piaceva :D
allora, passiamo alle cose serie...ho una classe:

class Int: Object
    {
    private:
        int _n;
    public:
        Int(int);
        Int();
        Int * Get();
        int GetInteger();
        Int * operator=(int);
        Int * operator=(Int *);
        Object * Clone();
    };
    
    Int::Int(int n)
    {
        _n = n;
    }
    Int::Int()
    {
        _n = 0;
    }
    int Int::GetInteger()
    {
        return _n;
    }
    Int * Int::Get()
    {
        return (Int *)Clone();
    }
    Int * Int::operator=(Int *op2)
    {
        _n = op2->GetInteger();
        return this;
    }
    Int * Int::operator=(int op2)
    {
        _n = op2;
        return this;
    }
    Object * Int::Clone()
    {
        Int *copy = new Int();
        copy = this;
        return copy;
    }

la classe object si limita ad esporre Clone come funzione virtuale

Allora il mio problema sono i due operator=
Visual studio 08 non mi segnala nessun errore ma se provo a fare:


Int *n = new Int();
n = 10;
cout<<n->GetInteger();

mi viene segnalato che è impossibile convertire int in Int *, cosa che non dovrebbe succedere visto che c'é l'operator=(int)

sbaglio forse qualcosa?(domanda ovvia e stupida dato che non funziona)

ps: non ho messo i tag code dato che modificavano Int in int e così non si capiva niente
Ultima modifica effettuata da lorenzo 08/05/09 10:40
aaa
08/05/09 11:57
theprogrammer
Beh, e' corretto che ti dia quell'errore ...

n non e' un oggetto di tipo Int ma un "puntatore ad un oggetto" di tipo Int

Quindi devi scrivere

*n = 10;
aaa
08/05/09 12:09
lorenzo
hai perfettamente ragione, non ci avevo pensato....grazie
aaa