Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema con il costruttore di copia
Forum - C/C++ - Problema con il costruttore di copia

Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 12:28
Mercoledì, 05/01/2011
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include "AlberoBR.h"
  3. #include "Lista.h"
  4. using namespace std;
  5. typedef AlberoBR<string> Albero;
  6. int main()
  7. {
  8.     Albero a;
  9.     string str;
  10.     str = "abc";
  11.     a.ins(str);
  12.     Lista<Albero> lista;
  13.     lista.addInCoda(a);
  14.    
  15.     return 0;
  16. }



Questo è il codice. Allora Albero e Lista sono due classi che simulano un albero con rispettive funzioni, e una lista molto simile a quella del STL.

quando faccio il passo lista.addInCoda(a); risulta il seguente errore:
  

In copy constructor `AlberoBR<T>::AlberoBR(const AlberoBR<T>&) [with T = std::string]':

84 C:\Users\Carmelo\Desktop\Progetto\progetto.cpp
instantiated from here

18 C:\Users\Carmelo\Desktop\Progetto\AlberoBR.h
[Warning] taking address of temporary

Come risolvo? Non riesco a capire le motivazioni

PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 13:29
Mercoledì, 05/01/2011
purtroppo per te mi hanno rubato ieri la sfera di cristallo, quindi non posso aiutarti in questo modo.

Se postassi il codice delle due classi magari....

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 14:20
Mercoledì, 05/01/2011
Testo quotato

Postato originariamente da carmelolg:
84 C:\Users\Carmelo\Desktop\Progetto\progetto.cpp
instantiated from here

18 C:\Users\Carmelo\Desktop\Progetto\AlberoBR.h
[Warning] taking address of temporary

Come risolvo? Non riesco a capire le motivazioni



vedo e provvedo, il codice sarà tipo:
Codice sorgente - presumibilmente C/C++

  1. void addInCoda(Albero a) {
  2.     nodo_t nodo;
  3.     [...]
  4.     return &nodo;
  5. }



semplicemente non puoi restituire l'indirizzo di una variabile allocata sullo stack della funzione (variabile locale), ma devi istanziarlo nell'heap (memoria globale) utilizzando il costrutto new:

Codice sorgente - presumibilmente C/C++

  1. nodo_t *nodo = new nodo_t;


PM