我遇到了一个问题,我无法解决它。当我编译我的所有功能都有问题时,我把这里的功能作为一个例子。错误是C2244:无法将函数定义与现有声明匹配。 所以这是我的头文件。
template <typename T>
class Gestionnaire {
public:
Gestionnaire();
~Gestionnaire();
bool addElement(const T* element);
bool removeElement(const T* element);
template < typename P>
bool removeContent(P& predicat);
template < typename P>
T* findElement(P& predicat) const;
bool findElement(const T& element) const;
private:
std::list<T*> liste_;
};
template<typename P>
template <typename T>
bool Gestionnaire<T>::removeContent(P& predicat) {
std::remove_if(liste_begin(), liste_.end(), predicat);
}
答案 0 :(得分:1)
您必须将template<typename P>
和template <typename T>
切换为与声明中显示的顺序相同的顺序。模板参数的第一个列表用于类模板,第二个用于模板化成员函数:
template<typename T>
template<typename P>
bool Gestionnaire<T>::removeContent(P& predicat) {
std::remove_if(liste_begin(), liste_.end(), predicat);
}