Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12

    Costruttore di copia - OOP C++

    Ciao a tutti! spero possiate aiutarmi con il mio problema....

    sto facendo pratica con la programmazione ad oggetti in c++, ide usato NetBeans...(imposto dal prof)

    allora mi sono cimentato nella costruzione di classi per gestire le liste, tutto ok fin quando non ho provato ad implementare un costruttore di copia:

    appena dichiaro il costruttore di copia nella classe:

    class Lista{
    ...
    Lista (const Lista& )
    {...}
    ...
    }

    ottengo il seguente errore:

    mkdir -p build/Debug/MinGW-Windows
    rm -f build/Debug/MinGW-Windows/main.o.d
    g++ -c -g -MMD -MP -MF build/Debug/MinGW-Windows/main.o.d -o build/Debug/MinGW-Windows/main.o main.cpp
    main.cpp:24:7: error: no matching function for call to 'Lista::Lista()'
    Liste.h:33:7: note: candidate is: Lista::Lista(const Lista&)
    main.cpp:25:7: error: no matching function for call to 'Lista::Lista()'
    Liste.h:33:7: note: candidate is: Lista::Lista(const Lista&)
    make[2]: Leaving directory `/c/Users/Andrea/Desktop/Ex OOP libro/Liste_ex'
    make[1]: Leaving directory `/c/Users/Andrea/Desktop/Ex OOP libro/Liste_ex'
    make[2]: *** [build/Debug/MinGW-Windows/main.o] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2

    Premetto che senza la dichiarazione del costruttore di copia il programma funziona perfettamente!
    Per quanto ho capito il problema è legato alla dichiarazione delle 2 variabile L1 e L2 di tipo lista che ho nel file del main, subito prma dell'inizio del codice del main ( senza il costruttore di copia tali dichiarazioni non mi danno problemi)

    Avete qualche suggerimento????
    Ho cercato in rete la sintassi del costruttore, ho provato a cambiarla la sintassi ma niente da fare.....
    Help me!!!!

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    In parole molto semplici, dichiarando un costruttore il C++ "non dichiara più automaticamente" il costruttore Lista::Lista(), quindi devi dichiararlo tu, anche se non fa nulla.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12
    GRAZIE GRAZIE GRAZIE.....1000 VOLTE!

    ora funziona...ma possibile che fra 3000slide e 2 libri nessuno ci ha scritto una cosa del genere????mah!

    grazie ancora!

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Prego, non c'è di che
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12
    Rieccomi...sono tornato! motivo? sempre il costruttore di copia...

    Allora domanda 1:
    la chiamata al costruttore di copia è questa:

    Lista L2(L1);?

    ho realizzato il codice per creare la lista di copia, l'ho utilizzata direttamente nel main per verificarla e funziona ma non riesco ad implementarla nel costruttore...in pratica eseguo il costruttore di copia ma quando vado a stampare la lista di copia questa è vuota!

    domanda 2:
    all'interno del costruttore di copia posso richiamare una funzione membro? se si come dovrei fare?la sintassi "standard" non funziona...

  6. #6
    scusa ma che hai scritto "dentro" il costruttore di copia?
    Se puoi mettere il codice del costruttore, del costruttore di copia, e del main diventa facile individuare eventuali errori

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12
    Grazie dell'aiuto ma ho risolto....il problema non è all'interno del costruttore di copia ma nella dichiarazione del nuovo oggetto.
    In pratica avevo letto che per chiamare il costruttore di copia la sintassi era "Lista L2(L1)" in realtà (se ho ben capito ora!) con questa sintassi definisco anche l'oggetto L2 che io invece avevo definito a parte....

    Grazie ancora per l'aiuto!

  8. #8
    Se tu scrivi
    codice:
         Lista L2(L1);
    definisci un nuovo oggetto L2 di tipo Lista, invocando il costruttore che prende in input il tipo di L1 (nel tuo caso anch'esso Lista, quindi, nel tuo caso, il costruttore di copia), chiami cioè
    codice:
    Lista::Lista(Lista& L1)
    {//...}
    Se invece l'avevi già creato da qualche altra parte ed in questo punto del codice ti serve che adesso sia una copia di L1 allora devi usare l'operatore = (che devi ridefinire nella classe, nel caso non l'avessi fatto), scrivendo semplicemente:
    codice:
    L2 = L1;

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.