0
template<class t> class Temp{
    static t x;
    public:
      Temp(){};
      t increment();
      ~Temp(){/*body of destructor is important.*/};
};

template<class t>t Temp<t>::x;

template<class t> t Temp<t>::increment(){
    return ++x;
}

/*Template specialization starts.*/
template<>class Temp<int>{
    int x;
    public:
      Temp():x(0){};
      int increment();
      ~Temp(){};
};
/*Below is the error part.*/
template<>int Temp<int>::increment(){
    return 0;
}

问题是最后一段代码。 编译错误 -> 错误:'int Temp::increment()' 的模板 ID 'increment<>' 与任何模板声明都不匹配

4

1 回答 1

0

您不必将 template<> 与专门的成员函数一起使用,因为编译器知道您将 Temp 专门用于 int 类型。所以一个空的模板<>给出了错误。

int Temp<int>::increment() {
  return ++x;
}

template 用于告诉编译器 T 是模板参数,仅此而已。但是在您的情况下,您专注于 int 类型,因此您不必指定模板<>。template<> 仅适用于类,不适用于在类外定义的成员函数。

于 2020-05-05T18:22:36.167 回答