PDA

View Full Version : C++: Puntatori... i soliti ignoti!


EnderIII
22-11-2005, 17:32
So che questa domanda domanda può apparire priva di senso ma vi assicuro che non è così.

Come si passa by reference un puntatore?

EnderIII
22-11-2005, 18:06
Magari mi spiego meglio.

Io ho un template, con un metodo Insert:

template <class Type> struct MyClass{

private:

Type Object;

public:

MyClass(){}

~MyClass(){}

void Insert(Type& Object)
{
this->Object = Object;
}

};

Supponiamo di definire questa classe:

MyClass<int*> Prova;

La domanda è come passo il parametro nel metodo Insert.

int Value;

Prova.Insert(&Value) mi dà il seguente errore di compilazione:

è impossibile convertire il parametro 1 da "int* _W64" a "int*&" with [Type=int*]

EnderIII
22-11-2005, 18:16
int Value;

Prova.Insert(&Value) mi dà il seguente errore di compilazione:

è impossibile convertire il parametro 1 da "int* _W64" a "int*&" with [Type=int*]

Scusate ragazzi, ho risolto così:

int* ValuePointer = &Value;

Prova.Insert(PointerValue);

sirus
23-11-2005, 17:14
quando usi le References ( & ) non devi usare la & nel passaggio di parametri ai metodi/funzioni ;) la & la usi solo quando la funzione/metodo viene definita con paramtri preceduti da * (puntatore)


int Value;
Prova.Insert(Value);

jappilas
23-11-2005, 18:11
diventa tutto chiaro se consideri la & usata come operatore in un L-value piuttosto che in un R-Value (rispettivamente, membro sinistro e destro di uno statement di assegnazione): nel primo caso vale come aliasing o copy constructor

nel secondo è address of (reference), solitamente usato per inizializzare un L-value costituito da un puntatore

EnderIII
20-12-2005, 14:08
quando usi le References ( & ) non devi usare la & nel passaggio di parametri ai metodi/funzioni ;) la & la usi solo quando la funzione/metodo viene definita con paramtri preceduti da * (puntatore)


int Value;
Prova.Insert(Value);


Attento il parametro del metodo deve essere un puntatore a intero per come viene definita la classe Prova.

La soluzione che ho trovato, utilizzando due istruzione, funziona ma passare by reference un puntatore in una sola istruzione credo non si possa fare (forse per problemi di ambiguità dell'istruzione)