0

我有 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 类中的函数。有什么建议么?

在此先感谢您的帮助。

4

2 回答 2

0

您传递的函数指针是一个类成员函数,它的类型是int(Container::*)(myType),这会导致问题。

如果funct函数不需要来自Container对象的信息,那么您可以将其设为静态。如果它确实需要访问对象,那么您要么想要将参数的类型更改为std::function<int(Container&,myType)>并将此函数与对象一起使用。或将其更改为std::function<int(int)>并通过std::bind.

于 2013-10-11T21:32:13.240 回答
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){;}
于 2013-10-11T21:38:36.973 回答