わかりました、テンプレート クラスの << 演算子をオーバーロードしようとして少し行き詰まりました。要件は、<< 演算子が、このクラスに対して定義された void 印刷関数を呼び出さなければならないことです。
テンプレートヘッダーの重要な部分は次のとおりです。
template <class T>
class MyTemp {
public:
MyTemp(); //constructor
friend std::ostream& operator<< (std::ostream& os, const MyTemp<T>& a);
void print(std::ostream& os, char ofc = ' ') const;
そして、これが私の印刷機能です。基本的にはベクトルであり、最後の要素を最初に印刷します:
template <class T>
void Stack<T>::print(std::ostream& os, char ofc = ' ') const
{
for ( int i = (fixstack.size()-1); i >= 0 ; --i)
{
os << fixstack[i] << ofc;
}
}
operator<< をオーバーロードする方法は次のとおりです。
template <class T>
std::ostream& operator<< (std::ostream& os, const Stack<T>& a)
{
// So here I need to call the a.print() function
}
しかし、「未解決の外部シンボル」エラーが表示されます。だから本当に私は2つの問題があると思います。1 つ目は、上記のエラーを修正する方法です。第二に、それが修正されたら、<< オーバーロード内で a.print(os) を呼び出すだけですか? ただし、ostreamを返す必要があることは知っています。どんな助けでも大歓迎です!