1

我有一个模板类,我遇到了一些问题。我在另一堂课上有这个指导:

value.push_back(x);

作为 xa unsigned int,对被调用的模板类赋值List<unsigned int>,并 push_back 这个函数:

template <class T>
void List<T>::push_back(T a=T(),int l=1){
    (*this).resize((*this).size+l,a);
}

我在代码块中有以下错误:

...\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

我不知道该怎么做,该函数已经有一个 int 的默认值,而且我已经尝试了 2 个不同的编译器,我真的不想在中添加另一个参数,push_back以便它变成push_back(x,1).

4

1 回答 1

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);
    }
};
于 2013-09-22T20:00:02.367 回答