Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - compilazione classi di template
Forum - C/C++ - compilazione classi di template

Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 22:54
Domenica, 23/08/2009
non riesco ad eseguire questo semplice programma includendo nel main l'heder file, mentre se includo il .cpp funziona, help me

funzione main
Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "nodo.h"
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.     Nodo <int> p;
  10.     p.stampa(5);
  11.     system("PAUSE");
  12.     return EXIT_SUCCESS;
  13. }




file node.h
Codice sorgente - presumibilmente C++

  1. #ifndef _nodo
  2. #define _nodo
  3.  
  4. template <class T> class Nodo
  5. {
  6. public:
  7. Nodo();
  8. void stampa(T);                
  9.                  
  10. private:        
  11. Nodo* netx;
  12. Nodo* previous;
  13. T data;        
  14.        
  15. };
  16.  
  17.  
  18.          
  19. #endif



file .cpp che contiene le definizioni della classe template
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include "nodo.h"
  3.  
  4.  
  5. using namespace std;
  6.  
  7.   template <class T> Nodo <T>::Nodo(){
  8.      
  9.          
  10.          }
  11.      
  12. template <class T> void Nodo <T>::stampa(T p){
  13.          
  14.           cout<<"hello world "<<p<<"\n";
  15.          
  16.          
  17.          
  18.          }





output del compilatore
Codice sorgente - presumibilmente VB.NET

  1. [Linker error] undefined reference to `Nodo<int>::Nodo()'
  2.     [Linker error] undefined reference to `Nodo<int>::stampa(int)'  
  3.   ld returned 1 exit status
  4.  C:\Users\xxx\Desktop\c++\lista funzionantge\Makefile.win [Build Error]  [Progetto1.exe] Error 1



Ultima modifica effettuata da puffin il 23/08/2009 alle 22:56


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 2:53
Lunedì, 24/08/2009
Devi inserire il file cpp che istanzia il template tra i file compilabili. Evidentemente il tuo compilatore lo sta scartando, quindi poi il linker non trova i symbols Nodo() e stampa(int).

Che IDE stai usando? di solito basta settare un flag o trascinare il file dentro al progetto per inserirlo nella lista dei "to be compiled"...


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 9:43
Lunedì, 24/08/2009
dev-c++

e tutti e 3 i file fanno parte del progetto

Ultima modifica effettuata da puffin il 24/08/2009 alle 10:20


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

PM Quote
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 10:20
Lunedì, 24/08/2009
ho risolto con il metodo della compilazione separata

Ultima modifica effettuata da puffin il 24/08/2009 alle 11:25


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

PM Quote