我有一个模板化课程,我遇到了一些问题。我在另一堂课中有这个意思:
value.push_back(x);
成为x unsigned int
,为被称为List<unsigned int>
的模板化类赋值,并推送此函数:
template <class T>
void List<T>::push_back(T a=T(),int l=1){
(*this).resize((*this).size+l,a);
}
我在codeblocks中遇到以下错误:
...\mp.h|86|error: no matching function for call to 'List<unsigned int>::push_back(unsigned int)'
...\mp.h|86|note: candidate is:
...\list.h|36|note: void List<T>::push_back(T, int) [with T = unsigned int]
...\list.h|36|note: candidate expects 2 arguments, 1 provided
我没有ideia要做什么,该函数已经有一个int的默认值,我已经尝试了2个不同的编译器,我真的不想在push_back
中添加其他参数这样就变成了push_back(x,1)
。
答案 0 :(得分:2)
您是否在声明上包含了默认值?
template <class T>
struct List
{
void push_back(T a=T(),int l=1);
};
一个好的编译器应该拒绝编译它,如果你没有(或至少警告关于差异),但是,只是为了确定。
习惯于“只”在课堂上实现模板成员:
template <class T>
struct List
{
void push_back(T a=T(),int l=1)
{
(*this).resize((*this).size+l,a);
}
};