2016-11-20 22 views
-4

オペレータをオーバーロードしようとしています< <が機能しています。私はこれを理解しようとしているいくつかの固い時間のために立ち往生しています。私はostreamでこれを行う方法の多くの例を見つけましたが、いずれも私の特定の問題を対象としていませんでした。<<クラス関数をオーバーロードしようとしています

#include <iostream> 

class foo 
{ 
public: 
    foo& operator<< (foo& (*pf)(foo&)) 
    { 
    return pf(*this); 
    } 
    foo& do_something_more(foo& os) 
    { 
    return os; 
    } 
}; 

ostream& do_something(ostream& os) 
{ 
    os << "1." << "\n" << "2."; 
    return os; 
} 

int main() 
{ 
    foo a; 

    std::cout << do_something; // this works 
    a << do_something_more; // this do not 

    system("pause"); 
    return 0; 
} 

これは私がこの問題を解決しようとした方法を一例にすぎません。 「do_something_more」というエラーが表示されます。宣言された識別子がこれに含まれています。

ありがとうございました!

+1

'do_something_more()'は 'foo'のメンバー関数であり、それを呼び出すにはインスタンスが必要です。 –

+0

それを静的にして 'a << foo :: do_something_more;' ...または単に非メンバを使用してください。 – LogicStuff

+2

そのようなものは本当に意味がありません。 –

答えて

-4

エラーが示すように、do_something_moreというオブジェクトは宣言していません。これはfooクラスのメソッドです。試してみてくださいcout<<a.do_something_more();

これでも、動作するかどうかはわかりません。

+2

まず試してみてください。 – LogicStuff

+0

恩赦を乞う? – Javi

関連する問題