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++ - Errore in fase di link
Forum - C/C++ - Errore in fase di link

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 11:04
Mercoledì, 02/12/2009
Non riesco a capire dove si trova l'errore che g++ mi segnale in fase di link...

L'errore è questo:

lorenzo@notebook:~/Scrivania/Mate$ g++ func_pars.o maintest.o -o app
maintest.o: In function `main':
maintest.cpp: (.text+0x75): undefined reference to `function_parser<double>::function_parser()'
maintest.cpp: (.text+0x85): undefined reference to `function_parser<double>::~function_parser()'
collect2: ld returned 1 exit status

l'ho compilato e linkato da console perché anche eclipse me lo dava come errore e per sicurezza ho voluto provare una strada alternativa.

Il problema si presenta quando tento di creare la classe nel file maintest.cpp.

Allora, i tre file in questione sono questi(li zippo e li allego):




lorenzo ha allegato un file: Mate.zip (1810 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da lorenzo il 02/12/2009 alle 11:04
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 12:35
Mercoledì, 02/12/2009
prova a mettere nell'header questa piccola modifica all'inizio...

Codice sorgente - presumibilmente C++

  1. #include <string>
  2. #include <exception>
  3. #include <map>
  4.  
  5. using namespace std;
  6.  
  7. template <class T>
  8. class function_parser<T> // <<<-- MODIFICA
  9. {
  10. public:
  11. // ... ecc...



Non l'ho provata, ma credo che dovrebbe andare bene...

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:35
Mercoledì, 02/12/2009
purtroppo in quel modo mi da l'errore:

"function_parser is not a template"

in fase di compilazione. Giustamente, aggiungo, dato che quella sintassi se non erro si usa nella specializzazione delle classi template. Comunque grazie per il suggerimento...devo venirne a capo perché ormai è una questione di orgoglio professionale :yup:

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 16:48
Mercoledì, 02/12/2009
Ci sono... :D

la classe template non può essere compilata "di per se", assume significato solo se specializzata. Quindi il compiler non genera alcun object file per il func_pars.cpp!
La soluzione sta nel mettere dichiarazione ed implementazione dentro il func_pars.h!

E' come quando usi delle macro, devi dichiararle nel .h perchè la macro di per se non può essere compilata, è la stessa cosa anche qui ;)

PS: Stavolta ho provato a compilare e funziona :)

Ultima modifica effettuata da TheKaneB il 02/12/2009 alle 16:49
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 18:54
Mercoledì, 02/12/2009
sai che sono un idiota? :-|
sapevo benissimo sta cosa ma me ne sono completamente dimenticato...assurdo

comunque grazie mille per l'aiuto :k:

PM Quote