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

    [C++] Errore di linking

    Ciao a tutti. Sto facendo un mini progetto che consiste nella simulazione di sistemi fisici semplici. Ho finora creato dei vettori matematici, delle palle e dei campi di forza (quello di gravità). Il codice mi sembra corretto, ma ottengo un errore durante il linking che davvero non riesco a decifrare... =(

    codice:
    g++gcc-4.6.x   -std=c++0x   -c -o testVettore.o testVettore.cc
    g++gcc-4.6.x   -std=c++0x   -c -o Vettore.o Vettore.cc
    g++gcc-4.6.x     testVettore.o Vettore.o   -o testVettore
    g++gcc-4.6.x   -std=c++0x   -c -o testPalla.o testPalla.cc
    g++gcc-4.6.x   -std=c++0x   -c -o Gravita.o Gravita.cc
    g++gcc-4.6.x   -std=c++0x   -c -o Palla.o Palla.cc
    g++gcc-4.6.x     testPalla.o Gravita.o Palla.o   -o testPalla
    Undefined symbols for architecture x86_64:
      "CampoForze::CampoForze(std::initializer_list<double> const&)", referenced from:
          Gravita::Gravita() in Gravita.o
          Gravita::Gravita() in Gravita.o
          Gravita::Gravita(std::initializer_list<double> const&, double) in Gravita.o
          Gravita::Gravita(std::initializer_list<double> const&, double) in Gravita.o
      "CampoForze::CampoForze(Vettore const&)", referenced from:
          Gravita::Gravita(Vettore const&, double) in Gravita.o
          Gravita::Gravita(Vettore const&, double) in Gravita.o
      "CampoForze::CampoForze(std::vector<double, std::allocator<double> > const&)", referenced from:
          Gravita::Gravita(std::vector<double, std::allocator<double> > const&, double) in Gravita.o
          Gravita::Gravita(std::vector<double, std::allocator<double> > const&, double) in Gravita.o
      "Vettore::Vettore(unsigned long)", referenced from:
          Gravita::agisci_su(Palla&)     in Gravita.o
      "operator*(double, Vettore const&)", referenced from:
          Gravita::agisci_su(Palla&)     in Gravita.o
      "Vettore::operator=(Vettore&&)", referenced from:
          Gravita::agisci_su(Palla&)     in Gravita.o
      "Vettore::~Vettore()", referenced from:
          Gravita::agisci_su(Palla&)     in Gravita.o
          Palla::Palla(Vettore const&, Vettore const&, Vettore const&) in Palla.o
          Palla::Palla(Vettore const&, Vettore const&, Vettore const&) in Palla.o
          Palla::Palla(std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::Palla(std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::Palla(std::initializer_list<double> const&, std::initializer_list<double> const&, std::initializer_list<double> const&) in Palla.o
          Palla::Palla(std::initializer_list<double> const&, std::initializer_list<double> const&, std::initializer_list<double> const&) in Palla.o
          ...
      "Vettore::Vettore(Vettore const&)", referenced from:
          Palla::Palla(Vettore const&, Vettore const&, Vettore const&) in Palla.o
          Palla::Palla(Vettore const&, Vettore const&, Vettore const&) in Palla.o
          Palla::Palla(Vettore const&, Vettore const&, double, double, Vettore const&) in Palla.o
          Palla::Palla(Vettore const&, Vettore const&, double, double, Vettore const&) in Palla.o
      "Vettore::Vettore(std::vector<double, std::allocator<double> > const&)", referenced from:
          Palla::Palla(std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::Palla(std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::Palla(std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, double, double, std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::Palla(std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, double, double, std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::aggiungi_forza(std::vector<double, std::allocator<double> > const&) in Palla.o
      "Vettore::Vettore(std::initializer_list<double> const&)", referenced from:
          Palla::Palla(std::initializer_list<double> const&, std::initializer_list<double> const&, std::initializer_list<double> const&) in Palla.o
          Palla::Palla(std::initializer_list<double> const&, std::initializer_list<double> const&, std::initializer_list<double> const&) in Palla.o
          Palla::Palla(std::initializer_list<double> const&, std::initializer_list<double> const&, double, double, std::initializer_list<double> const&) in Palla.o
          Palla::Palla(std::initializer_list<double> const&, std::initializer_list<double> const&, double, double, std::initializer_list<double> const&) in Palla.o
          Palla::aggiungi_forza(std::initializer_list<double> const&) in Palla.o
      "Vettore::operator+=(Vettore const&)", referenced from:
          Palla::aggiungi_forza(Vettore const&) in Palla.o
          Palla::aggiungi_forza(std::vector<double, std::allocator<double> > const&) in Palla.o
          Palla::aggiungi_forza(std::initializer_list<double> const&) in Palla.o
      "operator<<(std::basic_ostream<char, std::char_traits<char> >&, Vettore const&)", referenced from:
          Palla::stampa() const in Palla.o
    ld: symbol(s) not found for architecture x86_64
    collect2: ld returned 1 exit status
    make: *** [testPalla] Error 1
    Qualche idea di dove andare a cercarlo? (Se avete bisogno dei .h e dei .cc no problem, non li ho postati solo per non intasare la discussione).

    Grazie.
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  2. #2
    UP
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non è che ti manca lo switch:
    -std=c++0x
    nella terza e settima linea degli errori da te postati?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Originariamente inviato da shodan
    Non è che ti manca lo switch:

    nella terza e settima linea degli errori da te postati?
    Non penso, perché a me quello sembra il linker e non il compilatore...

    Posto anche il Makefile per chiarezza:

    codice:
    CC = g++gcc-4.6.x  
    CXX = g++gcc-4.6.x  
    CXXFLAGS = -std=c++0x
    
    all: testVettore testPalla
    
    # --- TEST VETTORE ---
    testVettore: testVettore.o Vettore.o
    testVettore.o: testVettore.cc Vettore.h
    
    # --- TEST PALLA ---
    testPalla: testPalla.o Gravita.o Palla.o
    testPalla.o: testPalla.cc Gravita.h Palla.h
    
    # --- CLASSI ---
    Vettore.o: Vettore.h Vettore.cc
    
    Palla.o: Palla.h Palla.cc Vettore.h Typedef.h
    
    CampoForze.o: CampoForze.h CampoForze.cc Vettore.h Palla.h Typedef.h ### PALLA DIVENTA OGGETTOMOBILE!
    Gravita.o: Gravita.h Gravita.cc CampoForze.h
    
    # --- CLEAN ---
    clean:
    	rm -f *.o
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Nel Makefile vanno messi solo i cile .cc, .cpp, .c
    I .h, .hpp, .hh sono già inclusi dai file su menzioniati.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Originariamente inviato da shodan
    Nel Makefile vanno messi solo i cile .cc, .cpp, .c
    I .h, .hpp, .hh sono già inclusi dai file su menzioniati.
    Davvero?

    Comunque l'errore é che non includevo tutti i .o nel linking del test. -.-
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da RooccoXXI
    Davvero?
    Beh, non ha molto senso compilare un file include.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  8. #8
    Originariamente inviato da shodan
    Beh, non ha molto senso compilare un file include.
    Chiaro, ma pensavo che le dipendenze andassero specificate comunque nel Makefile.
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  9. #9
    Originariamente inviato da shodan
    Nel Makefile vanno messi solo i cile .cc, .cpp, .c
    I .h, .hpp, .hh sono già inclusi dai file su menzioniati.

    non è corretto. Nel Makefile per ogni target che ha delle dipendenze si specificano gli header delle classi da cui dipende quindi i .h è giusto e normale che compaiano...
    Powered by MacOSX Lion

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da Tigre851
    non è corretto. Nel Makefile per ogni target che ha delle dipendenze si specificano gli header delle classi da cui dipende quindi i .h è giusto e normale che compaiano...
    Può essere. Nei Makefile che scrivevo io non ho mai inserito un .h (erano molto semplici però)
    Puoi fare un esempio veloce?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.