2010-05-27 1 views
0

Я пытаюсь загрузить данные из xml-файла с помощью TinyXML (C++).TinyXML и выборка значений

int height = rootElem->attrib<int>("height", 480); 

rootElem является корневым элементом загруженного XML-файл. Я хочу загрузить height значение из него (целое число). Но у меня есть функция оболочки для этого материала:

template<typename T> 
T getValue(const string &key, const string &defaultValue = "") 
{ 
    return mRootElement->attrib<T>(key, defaultValue); 
} 

Он работает со строкой:

std::string temp = getValue<std::string>("width"); 

И он терпит неудачу во время выборки:

int temp = getValue<int>("width"); 


>no matching function for call to ‘TiXmlElement::attrib(const std::string&, const std::string&)’ 

UPD: новая версия код:

template<typename T> 
T getValue(const string &key, const T &defaultValue = T()) 
{ 
    return mRootElement->attrib<T>(key, defaultValue); 
} 

ответ

1

Причина в том, что вы вызываете int-версию TiXmlElement :: attrib, но вы даете ей defualtValue типа const std :: string &, однако функция ожидает значения defaultValue типа int.

1

attrib<T>(key, defaultValue) Вероятно, это первый аргумент того же типа, что и аргумент второго шаблона.

Иными словами; T в mRootElement->attrib<T>(key, defaultValue) должен быть того же типа, что и defaultValue.