Tôi đang cố chuyển con trỏ tới hàm được xác định trong một lớp vào một lớp khác. Sau nhiều nghiên cứu, tôi tin rằng cú pháp của tôi là chính xác, nhưng tôi vẫn nhận được lỗi trình biên dịch. Dưới đây là một số mã trong đó chứng tỏ vấn đề của tôi:không thể chuyển con trỏ tới hàm giữa các lớp
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
}
};
Khi tôi cố gắng biên dịch mã này, lỗi tôi nhận được là
error: no matching function for call to 'Derived::Derived(string (MainClass::*)(int))'
Tiếp theo
note: candidates are: Derived::Derived(string (*)(int))
Bất kỳ ý tưởng gì tôi có thể đang làm sai?
và những gì về nếu các lớp học được tách rời và bạn không thể chỉ định 'MainClass :: * funPtr'? – fduff
Sau đó, tôi khuyên bạn nên sử dụng một thư viện chung như tạo tham số một hàm 'boost ::' và chuyển hàm với 'boost :: bind' –
tx nhưng dự án không tăng cường là gì? 'std :: function()' và 'std :: bind()' chỉ có sẵn trong C++ 11 mà chúng ta không có. – fduff