2011-10-28 63 views
4

我目前正在深入學習C++,並且遇到了幾個小時內已經陷入困境的東西。 爲什麼當我製作模板然後專門化它時,我無法調用或定義專用版本的函數?編譯器抱怨說,我已經搜索了Google可能提示我做錯了什麼,但無濟於事。我非常肯定這是很簡單的東西,我可以俯瞰:定義和調用特定模板的C++函數

template <typename T> 
class C { }; 

//specialization to type char 
template <> 
class C <char> 
{ 
    public: 
    void echo(); 
}; 

//compiler complains here 
template <> 
void C <char> :: echo() 
{ 
    cout << "HERE" << endl; 
} 

error: template-id ‘echo<>’ for ‘void C::echo()’ does not match any template declaration

Demo

+0

可能重複的[模板id不匹配任何模板delcaration](http://stackoverflow.com/questions/4694181/template-id-does-not-match-any-template-delcaration) – GWW

回答

7
//specialization to type char 
template <> 
class C <char> 
{ 
    public: 
    void echo(); 
}; 

//template<> <----- don't need to mention template<> here 
void C <char> :: echo() 
{ 
    cout << "HERE\n"; 
} 

P.s.當你的意思是'\n'時,千萬不要說endlWhat is the C++ iostream endl fiasco?

+1

Thanks @搶!最後一個問題,爲什麼函數「echo()」不需要模板說明符? – jrd1

+2

@ jrd1,因爲'echo()'本身不是'template'函數。這是'template class'的成員方法。 – iammilind

+0

@ jrd1,對比[此程序](http://ideone.com/ANzxC)。 –