错误c2955:使用c ++模板

时间:2015-11-15 14:50:43

标签: c++ templates

template<typename Elem>
class linkeddeque {
private:
dlinkedlist<Elem> d;
int n;
public:
    ...
    void sum_average();
};

template<typename Elem> void linkeddeque::sum_average() {   //C2955
    cout << "Error!" << endl;
}

template <> void linkeddeque<double>::sum_average() {
    int ss = n;
    double sum = 0;
    double temp[50];
    for (int i = 0; i < ss; i++) {
        temp[i] = back();
        sum = sum + back();
        removeback();
    }
    for (int i = 0; i < ss; i++) {
        insertfront(temp[i]);
    }
    double aver = sum / ss;
    cout << "sum : " << sum << " average : " << aver << endl;
}

我想使用specialization来为int / double / float定制sum_average。 所以,我使用了特化功能但发生了错误。 希望有人能说出这段代码有什么问题。

2 个答案:

答案 0 :(得分:0)

您定义类模板的成员函数的代码是错误的。变化

template<typename Elem> void linkeddeque::sum_average() {

template<typename Elem> void linkeddeque<Elem>::sum_average() {
                                        ~~~~~~

无论如何,错误似乎与专业化无关。

LIVE

答案 1 :(得分:0)

未正确模板sum_average()方法:

template<typename Elem> void linkeddeque<Elem>::sum_average() {
//                                  ~~~~^^^^^^~~~
    cout << "Error!" << endl;
}