これで、テンプレートクラスに< <演算子がオーバーロードされてしまいました。条件は、< <演算子がこのクラスに対して定義されたvoid print関数を呼び出さなければならないという要件です。ここで演算子<<プリント機能を呼び出すためにオーバーロードすると問題が発生する
は、テンプレートのヘッダから重要なものである:
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;
}
}
、ここでは、オペレーターを持っている< <は、オーバーロードされました:
template <class T>
std::ostream& operator<< (std::ostream& os, const Stack<T>& a)
{
// So here I need to call the a.print() function
}
しかし、 "未解決の外部シンボル"エラーが表示されます。だから本当に私は2つの問題があると思う。最初は、上記のエラーを修正する方法です。第二に、一度それが固定されたら私はちょうどa.print(os)inside < <を過負荷と呼ぶでしょうか?私はそれがostreamを返す必要があることを知っている。どんな助けでも大歓迎です!
このfaqを読んでください:http://www.parashift.com/c++-faq/templates.html#faq-35.16 –
最初のスニペットでクラステンプレート「MyTemp」を呼び出し、他のスニペットでは「Stack」を呼び出します。あなたは実際のコードでそれをしますか? –