Questo piccolo pezzo di codice innesca la rabbia del linker quando incluso in almeno due unità di traduzione (file CPP):Perché il linker si lamenta di più definizioni in questo modello?
# ifndef MAXIMUM_HPP
# define MAXIMUM_HPP
template<typename T>
T maximum(const T & a, const T & b)
{
return a > b ? a : b ;
}
/* dumb specialization */
template<>
int maximum(const int & a, const int & b)
{
return a > b ? a : b ;
}
# endif // MAXIMUM_HPP
Ma compila e collega bene con una sola unità di traduzione. Se rimuovo la specializzazione, funziona bene in tutte le situazioni. Ecco il messaggio del linker:
g++ -o test.exe Sources\test.o Sources\other_test.o
Sources\other_test.o:other_test.cpp:(.text+0x0): multiple definition of `int maximum<int>(int const&, int const&)'
Sources\test.o:test.cpp:(.text+0x14): first defined here
Non è possibile creare più istanze di modelli? Come spiegare questo errore e come risolverlo?
Grazie per qualsiasi consiglio!
Probabilmente dovrebbe restituire un riferimento da vostre funzioni. – Dani
Era solo un esempio derivante dal rintracciare gli errori che ho riscontrato in un codice più complesso. Penso che l'esempio possa essere più chiaro senza alcun riferimento :) – overcoder