Неопределенная ссылочная ошибка для метода шаблона [дубликат]
This question already has an answer here:
Why can templates only be implemented in the header file? 15 answersЭто сводит меня с ума в течение последних полутора часов. Я знаю, что это мелочь, но не могу найти, что не так (тот факт, что дождливый пятничный полдень, конечно, не помогает).
Я определил следующий класс, который будет хранить параметры конфигурации, прочитанные из файла, и позволит мне получить к ним доступ из моей программы:
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 );
};
где методconvert()
определяется вVAConfig.cpp
как
template <typename T>
T VAConfig::convert( const std::string& value )
{
T t;
std::istringstream iss( value, std::istringstream::in );
iss >> t;
return t;
}
Все довольно просто. Но когда я тестирую из моей основной программы, используя
int y = parameters->convert<int>("5");
Я получаюundefined reference to 'int VAConfig::convert<int>...'
ошибка компиляции. То же самое дляreadParameter()
.
Посмотрел много шаблонных уроков, но не могу понять это. Есть идеи?