объявление друга объявляет функцию, не являющуюся шаблоном [дубликат]

На этот вопрос уже есть ответ:

У меня есть базовый класс, аналогичный приведенному ниже коду. Я пытаюсь перегрузить

base.h:24: warning: friend declaration ‘std::ostream& operator<<(std::ostream&, Base*)’ declares a non-template function
base.h:24: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning

Я пробовал добавить после не соответствует ни одному объявлению шаблона . Я пытался создать полностью шаблонное определение оператора (чего я хочу), но мне удалось заставить его работать только с помощью следующего кода, с созданием экземпляра оператора вручную.

base.h

template 
class Base {
  public:
    friend ostream& operator << (ostream &out, Base *e);
};

base.cpp

ostream& operator<< (ostream &out, Base *e) {
    out << e->data;
return out;
}

Я хочу, чтобы это или подобное было в заголовке, base.h:

template 
class Base {
  public:
    friend ostream& operator << (ostream &out, Base *e);
};

template 
ostream& operator<< (ostream &out, Base *e) {
    out << e->data;
return out;
}

Я читал в другом месте в Интернете, что установка между

47
задан Chubsdad 28 October 2010 в 05:33
поделиться