Erro de referência indefinido para o método de modelo [duplicado]
Esta questão já tem uma resposta aqui:
Por que os modelos só podem ser implementados no arquivo de cabeçalho? 15 respostasIsso tem me deixado louco pela última hora e meia. Eu sei que é uma coisa pequena, mas não consigo encontrar o que está errado (o fato de que é uma tarde de sexta-feira chuvosa, é claro, não ajuda).
Eu defini a seguinte classe que manterá parâmetros de configuração lidos de um arquivo e me permitirá acessá-los do meu programa:
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 );
};
onde o métodoconvert()
é definido emVAConfig.cpp
Como
template <typename T>
T VAConfig::convert( const std::string& value )
{
T t;
std::istringstream iss( value, std::istringstream::in );
iss >> t;
return t;
}
Tudo bem simples. Mas quando eu testo do meu programa principal usando
int y = parameters->convert<int>("5");
Eu recebo umundefined reference to 'int VAConfig::convert<int>...'
Erro de compilação. Idem parareadParameter()
.
Analisamos muitos tutoriais de modelos, mas não podemos descobrir isso. Alguma ideia?