我試圖將一個指向另一個類中定義的函數的指針傳遞給另一個類。經過大量研究,我相信我的語法是正確的,但我仍然遇到編譯器錯誤。下面是一些代碼,演示了我的問題:無法將指針傳遞到類之間的函數
class Base
{
public:
BaseClass();
virtual ~BaseClass();
};
class Derived : public Base
{
public:
// assign strFunction to the function pointer passed in
Derived(string (*funPtr)(int)) : strFunction(funPtr);
~Derived();
private:
// pointer to the function that is passed in
string (*strFunction)(int value);
};
class MainClass
{
public:
MainClass()
{
// allocate a new Derived class and pass it a pointer to myFunction
Base* myClass = new Derived(&MainClass::myFunction);
}
string myFunction(int value)
{
// return a string
}
};
當我嘗試編譯這段代碼,我得到的錯誤是
error: no matching function for call to 'Derived::Derived(string (MainClass::*)(int))'
其次
note: candidates are: Derived::Derived(string (*)(int))
任何想法,我可能做錯了嗎?
以及如果這些類是分離的並且您不能指定'MainClass :: * funPtr'? – fduff 2012-08-13 11:57:32
然後我會推薦使用一個通用庫,例如將參數設置爲`boost :: function`並將函數傳遞給`boost :: bind` –
2012-08-13 12:46:15