2014-11-27 3 views
0

Я пытаюсь реализовать шаблонный шаблон, содержащий шаблонный метод.не удалось выполнить определение функции/метода

template <class T1, class T2, class T3, class T4> 
class ReferenceXML 
{ 
public: 
template <class T> 
static tinyxml2::XMLElement* addChildAtEnd 
(
    tinyxml2::XMLElement* parent, 
    const std::string& name, 
    const T& value 
); 

}; // end class definition 


template<class T> 
template < class T1, class T2, class T3, class T4> 
tinyxml2::XMLElement* ReferenceXML<T1,T2,T3,T4>::addChildAtEnd(
    tinyxml2::XMLElement* parent, 
    const std::string& name, 
    const T& value 
) 
{ 
    tinyxml2::XMLElement* element = addChildAtEnd(parent, name); 
    if (element == NULL) 
    { 
     return NULL; 
    } 
    std::stringstream ss; 
    ss << value; 
    tinyxml2::XMLText* value_ptr = element->GetDocument()->NewText(ss.str().c_str()); 
    element->InsertFirstChild(value_ptr); 
    return element; 
} 

Ошибка я получаю следующее: 1> C: \ Проекты \ ufm_integration_adtf \ ствол \ testfilters \ xmlexporter \ Sources \ xmlexporter_ref_objdesc \ Sources \ referencexml.h (278): ошибка C2244: ' ReferenceXML :: addChildAtEnd ': не может соответствовать определению функции к существующей декларации

1> определение

1>' tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd (tinyxml2 :: XMLElement *, Const станд :: струнной &, const T &) '

1> существующие заявления

1> 'tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd (tinyxml2 :: XMLElement *, Const станд :: строка &, сопзЬ Т &, Const станд :: строка &)'

1> 'tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd (tinyxml2 :: XMLElement *, Const станд :: строка &, сопзЬ Т &)' 1> «tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd (tinyxml2: : XMLElement *, tinyxml2 :: XMLElement *) ' 1>' tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd (tinyxml2 :: XMLElement *, const std :: string &) '

Я не понимаю, почему определение не соответствует одному из существующих объявлений, может ли кто-нибудь помочь? Спасибо.

ответ

3

Просто замена шаблонов в определении, кажется, решить проблему:

template < class T1, class T2, class T3, class T4> 
template < class T > 
XMLElement* ReferenceXML<T1,T2,T3,T4>::addChildAtEnd(

Таким образом, порядок шаблон в вашей декларации соответствует вашему определению.

+0

спасибо martin_pr! –