无法匹配函数/方法定义

时间:2014-11-27 11:07:15

标签: c++ tinyxml

我试图实现一个包含模板化方法的模板化类。

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&gt; c:\ projects \ ufm_integration_adtf \ trunk \ testfilters \ xmlexporter \ sources \ xmlexporter_ref_objdesc \ sources \ referencexml.h(278):错误C2244:&#39; ReferenceXML :: addChildAtEnd&#39; :无法将函数定义与现有声明匹配

1&GT;定义

1&GT; &#39; tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd(tinyxml2 :: XMLElement *,const std :: string&amp;,const T&amp;)&#39;

1&GT;现有声明

1&GT; &#39; tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd(tinyxml2 :: XMLElement *,const std :: string&amp;,const T&amp;,const std :: string&amp;)&#39;

1&GT; &#39; tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd(tinyxml2 :: XMLElement *,const std :: string&amp;,const T&amp;)&#39; 1 GT; &#39; tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd(tinyxml2 :: XMLElement *,tinyxml2 :: XMLElement *)&#39; 1 GT; &#39; tinyxml2 :: XMLElement * ReferenceXML :: addChildAtEnd(tinyxml2 :: XMLElement *,const std :: string&amp;)&#39;

我不明白为什么这个定义与现有声明之一不匹配,有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:3)

只是交换定义中的模板似乎可以解决问题:

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

这样,声明中的模板顺序与您的定义相符。