Не могу вынести определение friend-оператора из тела шаблонного класса
Код снизу выдаёт ошибку неразрешенных внешних элементов. Проблема связана с определением оператора вывода. Если я вношу его определение в класс Number, то ошибки нет.
#include <iostream>
template <typename T>
class Number
{
T val;
friend std::ostream& operator<< (std::ostream& os, const Number<T>& num);
public:
Number() : val(T{}) { }
Number(T value) : val{ value } { }
};
template <typename T>
std::ostream& operator<< (std::ostream& os, const Number<T>& num)
{
os << num.val;
return os;
}
int main()
try
{
Number<int> a;
a = 10;
std::cout << a;
return 0;
}
catch (std::exception& e)
{
std::cout << e.what();
return 1;
}
catch (...)
{
std::cout << "Unknown error";
return 2;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Запишите его так, поясняя, что это все же шаблонный оператор...:
template<typename U>
friend std::ostream& operator<< (std::ostream& os, const Number<U>& num);
Больше ничего менять не надо.