Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500

    [C++] Implementazione costruttore di copia

    Ciao a tutti, sto iniziando ad avvicinarmi per motivi di studi al C++...sono ancora alle prime armi anche se ho una buona base di C ma sono ancora carente sulle peculiarità del C++ per esempio l'implementazione di un costruttore di copia...per farla breve io ho una classe Elenco dove ho istanziato un vector di Persona (una classe che identifica una persona)

    codice:
    private: std::vector<Persona> elenco;
    adesso nel main ad un certo punto faccio queste operazioni:
    nota: il metodo add() non fa altro che inserire una nuova Persona nel vector
    codice:
        
        Elenco e1;
        e1.add(Persona("a","b"));
        e1.add(Persona("c","d"));
        e1.add(Persona("e","f"));
        
        Elenco e2=e1;
    in questo caso senza un costruttore di copia, in e2 va a finire l'indirizzo di e1, quindi se provo a fare:
    codice:
    e2.remove(1)
    metodo remove(index) che rimuove l'elemento alla posizione index, l'elementi risulta rimosso anche da e1! questo perchè suppongo e1 e e2 puntano allo stesso vector...mentre volendo fare un costruttore di copia, quando faccio
    codice:
    Elenco e2=e1;
    voglio costruire in e2 una vera e propria copia di e1....ho provato ad implementare tale costruttore ma non ne vengo a capo:
    codice:
    Elenco::Elenco(const Elenco& elem ) {
     //...operazioni...
    }
    Il fatto è che non so come referenziare elem...perchè se scrivo:
    codice:
    elem.size()
    con size() metodo che restituisce il numero di elementi nel vector; il problema è che quando scrivo elem. il compilatore (visual studio 2010) mi da le varie opzioni di auto-completamento ma mi dice poi che è errato:
    codice:
    Errore    1    error C2662: 'Elenco::size': impossibile convertire il puntatore 'this' da 'const Elenco' a 'Elenco &'
    grazie per eventuali aiuti
    spero di essere stato chiaro
    magari non sarà difficile ma sono ancora alle prime armi
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  2. #2
    elem è passato per riferimento const, per cui puoi accedere solo ai suoi metodi marcati come const.
    Leggi: http://www.parashift.com/c++-faq/const-correctness.html
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.