我有3个类 - 超类,子类和容器类。 我的超类有以下构造函数:
Superclass(char* t,int(*i)(myType),int a,int b,int c,int p){
T=t;
I=i;
A=a;
B=b;
C=c;
P=p;
}
子类构造函数:
Subclass(char* t,int(*i)(myType),int a,int b,int c,int p)
: Superclass(t,i,a,b,c,p){;}
容器类包含多个指向子类类型对象的指针:
class Container{
public:
char x[2000];
int funct(myType);
...
Subclass* S;
...
Container(){
S= new Subclass(x,&funct,3,4,2000,0);
...
}
}
我在上面的行中遇到编译器错误 “S = new ......”,上面写着:
"Error: No instance of 'Subclass::Subclass' matches the argument list
argument types are: (char[2000],int(Container::*)(myType),int,int,int,int)"
我相信(虽然我不确定)该错误与传递的函数指针有关。我以类似的方式使用了函数ptrs,但似乎不喜欢它指向Container类中的函数。有什么建议吗?
提前感谢您的帮助。
答案 0 :(得分:0)
您传递的函数指针是类成员函数,其类型为int(Container::*)(myType)
,这会导致问题。
如果funct
函数不需要Container
对象中的信息,则可以将其设置为静态。如果它确实需要访问该对象,那么您要么将参数的类型更改为std::function<int(Container&,myType)>
并将该函数与对象一起使用。或者将其更改为std::function<int(int)>
并通过std::bind
传递函数。
答案 1 :(得分:0)
除非是静态成员函数,否则不能将成员函数作为普通函数指针传递。
static int funct(myType);
当然,静态函数不能访问非静态的成员变量或函数,除非您将它们与另一个对象指针结合使用。
您还可以将传递给构造函数的指针类型更改为成员指针,但这更常见,除非您也传递该类型的对象,否则通常不会有用。
Subclass(char* t,Container* cp, int((Container::*)i)(myType),int a,int b,int c,int p)
: Superclass(t,cp,i,a,b,c,p){;}