我的代码包含以下内容:
1)A.h(不能被我改变,因为它是由其他人定义的)
typedef void (*fnctPtr)(int input);
class A
{
A(fnctPtr func); //Constructor for A
//... Other details omitted
};
2)B.h(我的代码)
#include "A.h"
class B
{
public:
B() : m_a(m_private_method){}; //Ptr to non static method.
void m_private_method(int input);
A m_a; //Member variable
};
3)一个简单的main.cpp声明和B
的实例#include <iostream>
#include "B.h"
int main()
{
B b;
return 0;
}
它不编译,因为m_a需要使用void(*)(int input)类型的fnct指针进行初始化,而不是void(B :: *)(int input)。
关于如何实现我想要的任何建议?
谢谢
答案 0 :(得分:1)
如果您真的遇到typedef void (*fnctPtr)(int input);
,那么您必须提供一个指向函数的指针,该函数将int
作为参数并且不返回任何内容。
当你'提供B
类的int
指针成员函数并返回nothng时,你真的提供了一些可以看作的东西:
B
的实例和int
。B
实例中查找的虚拟函数,以了解调用两个参数(B
和int
)的函数。没有办法让任何符合第一个定义的东西。
你可能会发现一个hack(保持一个全局实例并在辅助函数中使用它),但这很大程度上取决于完整的问题。