Я пытаюсь перегрузить оператор < < как друга к шаблону класса Pair, но я продолжаю получать предупреждение о компиляторе, говоря
friend declaration std::ostream& operator<<(ostream& out, Pair<T,U>& v) declares a non template function
для этого кода:
friend ostream& operator<<(ostream&, Pair<T,U>&);
он дает второе предупреждение в качестве рекомендации, говоря
if this is not what you intended, make sure the function template has already been declared and add <> after the function name here
Вот определение функции
template <class T, class U>
ostream& operator<<(ostream& out, Pair<T,U>& v)
{
out << v.val1 << " " << v.val2;
}
и вот весь класс.
template <class T, class U>
class Pair{
public:
Pair(T v1, U v2) : val1(v1), val2(v2){}
~Pair(){}
Pair& operator=(const Pair&);
friend ostream& operator<<(ostream&, Pair<T,U>&);
private:
T val1;
U val2;
};
Я не был уверен, что делать с предупреждением рекомендации, кроме этого, может быть, мне нужно помещать где-нибудь в декларацию друга. Кто-нибудь знает правильный синтаксис для этого? Спасибо.