Error de referencia no definido para el método de plantilla [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué solo se pueden implementar plantillas en el archivo de encabezado? 15 respuestas

Esto me ha vuelto loco durante la última hora y media. Sé que es algo pequeño, pero no puedo encontrar lo que está mal (el hecho de que sea un viernes por la tarde lluvioso, por supuesto, no ayuda).

He definido la siguiente clase que mantendrá los parámetros de configuración leídos de un archivo y me permitirá acceder a ellos desde mi 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 );
};

donde el metodoconvert() se define enVAConfig.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;
}

Todo bastante simple. Pero cuando pruebo desde mi programa principal usando

int y = parameters->convert<int>("5");

Me sale unundefined reference to 'int VAConfig::convert<int>...' error de compilación. Lo mismo parareadParameter().

Miré un montón de tutoriales de plantillas pero no pude resolver esto. ¿Algunas ideas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta