Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C++] Problema con il linker, credo

    Ciao a tutti, sto tentando di risolvere un problema abbastanza basilare, sto imparando il C++ provenendo dal Java.
    Ho creato una classe libri:

    File: libri.h
    codice:
    #include <iostream>
    using namespace std;
    
    class libri {
        public:
            libri();
            /*...metodi...*/
        protected:
            /*...campi....*/
    };

    File: libri.cpp
    codice:
    #include <iostream>
    #include "libri.h"
    using namespace std;
    
    libri::libri(){
        cout << "Siamo nel costruttore" << endl;
    }

    File: usoLibri.cpp
    codice:
    #include <iostream>
    #include "libri.h"
    using namespace std;
    
    int main(){
        libri l;
    }
    Le guide che sto seguendo dicono che il processo ottimale per creare classi e' quello di separare in 2 file(.h e .cpp) la dichiarazione dall'implementazione e poi in un altro file .cpp testare la classe (per l'information hiding suppongo).

    Ma quando compilo il file usoLibri.cpp il compilatore mi dice che il costruttore non e' definito, perche' ???
    Penso che il linker dovrebbe collegare la dichiarazione della classe nel file libri.h con l'implementazione della stessa nel file libri.cpp, ma a quanto pare non lo fa.....

    Potete aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Aggiungi

    #include "libri.h"

    in libri.cpp
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Aggiungi

    #include "libri.h"

    in libri.cpp
    Si scusa l'include c'era, mi sono dimenticato di riportarla.

    EDIT: l'ho aggiunto

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ok ... hai ancora errori? Quale ambiente/compilatore usi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Uso ubuntu 9.10, il compilatore e' g++

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E, scusa, come compili i vari file ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Uso Code::Blocks che dovrebbe usare il compilatore implementato di default nel sistema(cioe' g++), ma ho provato anche a compilarli da terminale con il comando "g++ -o usoLibri usoLibri.cpp libri.cpp" risultato identico...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pier_IP
    risultato identico...
    Mi mostri (copia-incolla) il messaggio d'errore completo quando compili con g++ ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Confermo che a me funziona...
    codice:
    matteo@teomint:~/Desktop/test$ cat > libri.h
    #include <iostream>
    using namespace std;
    
    class libri {
        public:
            libri();
            /*...metodi...*/
        protected:
            /*...campi....*/
    };
    matteo@teomint:~/Desktop/test$ cat > libri.cpp
    #include <iostream>
    #include "libri.h"
    using namespace std;
    
    libri::libri(){
        cout << "Siamo nel costruttore" << endl;
    }
    matteo@teomint:~/Desktop/test$ cat > usoLibri.cpp
    #include <iostream>
    #include "libri.h"
    using namespace std;
    
    int main(){
        libri l;
    }
    matteo@teomint:~/Desktop/test$ g++ -o usoLibri usoLibri.cpp libri.cpp 
    matteo@teomint:~/Desktop/test$ ./usoLibri 
    Siamo nel costruttore
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    Confermo che a me funziona...
    Naturalmente anche a me ... con diversi ambienti/compilatori ... ecco perché volevo "vedere" l'errore ... attendiamo fiduciosi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.