Problema di base con classi e template

di il
2 risposte

Problema di base con classi e template

Salve sono uno studente,sto incominciando ora a usare i template per le classi in c++
ho creato un piccolo programmino che non deve far altro che restituirmi il massimo tra 2 valori.
ho un solo errore,nel momento in cui chiamo il metodo della classe per confrontare i due numeri,mi da undefined reference to (nomeclasse)mypair<int>::getmax()(nome metodo),
su google ho letto che significa che la libreria non è linkata,ma è impossibile dato che l'oggetto di tipo mypair( nome della mia classe ) lo crea senza problemi.
io non riesco a capire dove sta l'errore,uso codeblock ,se vi e possibile controllarlo includo il piccolo codice cosi si dovrebbe capire,grazie in anticipo della pazienza
questo è il .h
#include <iostream>
#ifndef MYPAIR_H
#define MYPAIR_H

template <class T>
class mypair {
    T a, b;
  public:
    mypair (T first, T second)
      {a=first; b=second;}
    T getmax ();
};
#endif
questo è il .cpp

#include "mypair.h"
template <class T>
T mypair<T>::getmax ()
{
  T retval;
  if (a>b)retval=a;
  else retval=b;
  return retval;
}
e il minuscolo main

#include "mypair.h"
using namespace std;

int main () {
mypair <int> myobject (100, 75);
cout << myobject.getmax();    //l'errore è segnalato qui
return 0;
}

2 Risposte

  • Re: Problema di base con classi e template

    Ciao.
    Sei incappato in un tipico errore di concetto sui template.
    I template non possono essere separati tra header file e implementation file. (il .h e il .cpp), ma tutto il codice deve risiedere nel .h, altrimenti il linker non sa come risolvere le dipendenze.
    
    #include <iostream>
    #ifndef MYPAIR_H
    #define MYPAIR_H
    
    template <class T>
    class mypair {
        T a, b;
      public:
        mypair (T first, T second)
          {a=first; b=second;}
        T getmax ();
    };
    
    template <class T>
    inline T mypair<T>::getmax ()
    {
      T retval;
      if (a>b)retval=a;
      else retval=b;
      return retval;
    }
    
    #endif
    
    
  • Re: Problema di base con classi e template

    Grazie mille provo subito a rimettere le cose a posto

    edit: si funziona alla grande, grazie ancora
Devi accedere o registrarti per scrivere nel forum
2 risposte