Определение и вызов функции C ++ специализированного шаблона - PullRequest
4 голосов
/ 28 октября 2011

Я в настоящее время изучаю C ++ всесторонне, и я столкнулся с чем-то, что озадачило пару часов сейчас. Почему, когда я делаю шаблон, а затем специализирую его, я не могу вызвать или определить эту функцию для специализированной версии? Компилятор жалуется, и я отыскивал Google для возможной подсказки относительно того, что Я делаю не так, но безрезультатно. Я очень уверен, что это что-то очень простое, что я пропускаю:

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;
}

ошибка: идентификатор шаблона "echo <>" для "void C :: echo ()" не совпадает любой шаблон объявления

Демо .

1 Ответ

7 голосов
/ 28 октября 2011
//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";
}

Ps Никогда не говорите endl, когда вы имеете в виду '\n'. Что такое C ++ iostream endl fiasco?

...