私はクラスを持っており、頭の中で次のように定義されています:
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())を使用しようとすると、次のリンカーエラーが発生します。
Undefined symbols: std::basic_ostream<char, std::char_traits<char> >& operator<< <InnerType>(std::basic_ostream<char, std::char_traits<char> >&, MyClass<InnerType> const&)
コンパイラが自動的にこれを生成していないことに驚いています...私が間違っていることについて何か提案はありますか?