将模板函数与默认参数混合时出错

时间:2013-09-22 19:56:55

标签: c++ templates

我有一个模板化课程,我遇到了一些问题。我在另一堂课中有这个意思:

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)

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);
    }
};