Oppure

Loading
25/10/07 12:28
JackDaniels
Salve a tutti,
arrivo subito al dunque. questo è il codice:

File classe.h
//Dichiarazione e prototipi della classe CLASSE

#ifndef CLAX
#define CLAX

template <class generic> class Classe {
      generic a;
      generic b;
      public:
             void setClasse(generic x, generic y);
             void getClasse();
};

#endif


File classe.cpp
//Implementazione dei metodi della classe CLASSE

#include "classe.h"
#include <iostream>
using namespace std;

template <class generic>
void Classe<generic>::setClasse(generic x, generic y){
     a=x;
     b=y;
}

template <class generic>
void Classe<generic>::getClasse(){
     cout <<"a= " <<a;
     cout <<'\n' <<"b= " <<b;
     cout <<"\n\n";
}



File main.cpp

#include <cstdlib>
#include <iostream>
#include "classe.h"

using namespace std;

int main()
{
    Classe<int> oggetto1;
    oggetto1.setClasse(10,20);
    oggetto1.getClasse();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}



Compilando vengono restituiti i messaggi:
[Linker error] undefined reference to `Classe<int>::setClasse(int, int)'
[Linker error] undefined reference to `Classe<int>::getClasse()'

So che dipende dal fatto che Classe è template ma a me serve così che faccio? ho tralasciato qualcosa? purtroppo sui manuali che ho e su internet non trovo nulla
help
Ultima modifica effettuata da JackDaniels 25/10/07 12:32
aaa
25/10/07 13:56
netarrow
metti tutta la definizione di Classe nel file header:

classe.h
//Dichiarazione e prototipi della classe CLASSE

#ifndef CLAX
#define CLAX

#include <iostream>
using namespace std;

template <typename generic>
class Classe {
private:
generic a;
generic b;
public:
void setClasse(generic x, generic y);
void getClasse();
};

template <typename generic>
void Classe<generic>::setClasse(generic x, generic y){
a=x;
b=y;
}

template <typename generic>
void Classe<generic>::getClasse(){
cout <<"a= " <<a;
cout <<'\n' <<"b= " <<b;
cout <<"\n\n";
} 

#endif 


ho provato e funziona, inoltre guardando il C++ tecniche avanzate di programmazione deitel&deitel ho notato che tutte le classi template non hanno la separazione dell'implementazione in un altro file cpp.
Ultima modifica effettuata da netarrow 25/10/07 13:56
aaa
26/10/07 8:04
JackDaniels
Postato originariamente da netarrow:

metti tutta la definizione di Classe nel file header:

classe.h
//Dichiarazione e prototipi della classe CLASSE

#ifndef CLAX
#define CLAX

#include <iostream>
using namespace std;

template <typename generic>
class Classe {
private:
generic a;
generic b;
public:
void setClasse(generic x, generic y);
void getClasse();
};

template <typename generic>
void Classe<generic>::setClasse(generic x, generic y){
a=x;
b=y;
}

template <typename generic>
void Classe<generic>::getClasse(){
cout <<"a= " <<a;
cout <<'\n' <<"b= " <<b;
cout <<"\n\n";
} 

#endif 


ho provato e funziona, inoltre guardando il C++ tecniche avanzate di programmazione deitel&deitel ho notato che tutte le classi template non hanno la separazione dell'implementazione in un altro file cpp.


Si net hai ragione. Avevo risolto da me andando a includere nel main non il file classe.h bensì il classe.cpp che poi in soldoni sarebbe la stessa cosa che hai detto tu ma continuando a lasciare il file.h separato dal .cpp. Ma guarda un pò...dovrebbero comunicarlo a lettere cubitali sui manuali quando si sognano di fare queste differenziazioni...biricchini:rotfl:

Grazie cmq:k:
aaa