DOMANDA "undefined reference to" funzione membro, come fare?

Peri

Nuovo Utente
82
3
Domanda: come risolvo il seguente errore? e perché si genera?

Compilatore GNU GCC Compiler vi riporto il codice nei rispettivi file:

C++:
//file header.h

#ifndef H
#define H

template <class T> class obj {
    public:
        obj( unsigned int );
};

#endif // H

C++:
//file hr.cpp

#include "header.h"

template <class T> obj<T>::obj( unsigned int ) {}

C++:
//file main.cpp

#include "header.h"

int main() {
    obj <int> a( 1 );
    return 0;
}

La compilazione mi riporta il seguente messaggio di errore rilevato nel file main.cpp alla riga dove è scritto obj <int> a( 1 ); dicendo:
undefined reference to 'obj<int>::obj(unsigned int)'
error: 1d returned 1 exit status


nota:
Scrivendo le definizioni nel file header.h (e quindi escludendo il file hr.cpp) funziona. Ma esiste un altro modo?
 

Peri

Nuovo Utente
82
3
Non hai implementato il metodo obj.
Come dovrei fare senza scrivere tutto nel file di intestazione (in quel caso funzionerebbe ma vorrei evitare)?

Faccio notare pure che questo problema sorge per via del template (perché senza compila correttamente).
Anche se comunque non capisco, forse è perché compilandolo non nel file di intestazione allora sconnette la definizione dalla dichiarazione? Ho provato a fare una roba che non ho mai fatto (non uccidetemi era un esperimento) ossia includere il file hr.cpp nell'header. Ma poi il compilatore ha minacciato me e tutta la mia famiglia quindi ho lasciato perdere ?
 
U

Utente cancellato 371741

Ospite
per esempio mettendo

template <class T> obj<T>::obj( unsigned int ) {}

dentro a header.h o nel file main.cpp
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!