У меня есть класс, определенный в голове как:
template <typename T> class MyClass
{
template <typename U> friend std::ostream& operator<<(std::ostream& output, const MyClass<U>& p);
public:
...
}
В файле реализации у меня есть:
template <typename U> std::ostream& operator<<(std::ostream& output, const MyClass<U>& m)
{
output << "Some stuff";
return output;
}
Что выглядит довольно кошерно. Однако, когда я пытаюсь использовать этот оператор (например, std :: cout << MyClass ()), я получаю следующую ошибку компоновщика: </p>
Undefined symbols: std::basic_ostream<char, std::char_traits<char> >& operator<< <InnerType>(std::basic_ostream<char, std::char_traits<char> >&, MyClass<InnerType> const&)
Я удивлен, что компилятор не сгенерировал это автоматически для меня ... Какие-нибудь предложения относительно того, что я делаю неправильно?