Niezdefiniowany błąd odniesienia dla metody szablonu [duplikat]
To pytanie ma już tutaj odpowiedź:
Dlaczego szablony mogą być implementowane tylko w pliku nagłówkowym? 15 odpowiedziTo doprowadza mnie do szału przez ostatnie półtorej godziny. Wiem, że to mała rzecz, ale nie mogę znaleźć tego, co jest nie tak (oczywiście, że to deszczowe popołudnie w piątek, nie pomaga).
Zdefiniowałem następującą klasę, która będzie przechowywać parametry konfiguracyjne odczytane z pliku i pozwoli mi uzyskać do nich dostęp z mojego programu:
class VAConfig {
friend std::ostream& operator<<( std::ostream& lhs, const VAConfig& rhs);
private:
VAConfig();
static std::string configFilename;
static VAConfig* pConfigInstance;
static TiXmlDocument* pXmlDoc;
std::map<std::string, std::string> valueHash;
public:
static VAConfig* getInstance();
static void setConfigFileName( std::string& filename ) { configFilename = filename; }
virtual ~VAConfig();
void readParameterSet( std::string parameterGroupName );
template<typename T> T readParameter( const std::string parameterName );
template<typename T> T convert( const std::string& value );
};
gdzie metodaconvert()
jest zdefiniowany wVAConfig.cpp
tak jak
template <typename T>
T VAConfig::convert( const std::string& value )
{
T t;
std::istringstream iss( value, std::istringstream::in );
iss >> t;
return t;
}
Wszystko całkiem proste. Ale kiedy testuję z mojego głównego programu używając
int y = parameters->convert<int>("5");
Dostajęundefined reference to 'int VAConfig::convert<int>...'
błąd kompilacji. To samo dotyczyreadParameter()
.
Sprawdziłem wiele samouczków szablonów, ale nie mogłem tego zrozumieć. Jakieś pomysły?