When I study template specialization, I use a very simple example, but I still have an error.
#include <iostream> template <class T> class chrrr{ public: T chgchr(T c); }; template < class T> T chrrr<T>::chgchr(T c){ return c+1; } template <> class chrrr<char>{ public: char chgchr(char c); }; template <> char chrrr<char>::chgchr(char c){ return c+2; } using namespace std; int main(){ char a='a'; int i=1; chrrr<int> it; chrrr<char> ch; cout<<ch.chgchr(a)<<endl; cout<<it.chgchr(i)<<endl; return 0; }
Error:
line 20: error: template-id 'chgchr<>' for 'char chrrr<char>::chgchr(char)' does not match any template declaration
I wonder why the dose does not match? And if I define chgchr in the body definition class, and not outside of it, it works very well.
source share