class Producer
{
public:
Producer(){
}
void Shout(){
for(int i=0;i<10;i++){
printf("I am a producer!!\n");
}
}
};
void ThreadTest()
{
void (Producer::* ptfptr) () = &Producer::Shout;
Producer prod;
(prod.*ptfptr) ();
Thread *pt = new Thread("producer");
pt->Fork((prod.*ptfptr)(),0);
}
我正在尝试在nachos中创建一个生产者线程,为此我创建了一个类Producer
(我的任务必需)。我在类声明中有一个非静态成员函数Shout()
,我使用上面的代码创建并使用指向Shout()
方法的函数指针。编译器给我“无效使用非静态成员函数”。这里的错误在哪里?
答案 0 :(得分:0)
你没有说出编译器抱怨哪一行,但我猜这就是这一行:
void (Producer::* ptfptr) () = &Producer::Shout;
这里使用非静态函数的地址创建函数指针。非静态函数需要一个对象来操作,而你还没有一个对象。
查看this question及其最佳答案,了解如何做您正在寻找的事情。