0
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()方法的函数指针。编译器给了我“无效使用非静态成员函数”。这里的错误在哪里?

4

1 回答 1

0

你没有说编译器在抱怨哪一行,但我猜是这一行:

void (Producer::* ptfptr) () = &Producer::Shout;

在这里,您正在使用非静态函数的地址创建函数指针。非静态函数需要一个对象来操作,而你还没有对象。

看看这个问题及其最佳答案,以获得如何做你正在寻找的事情的一个很好的例子。

于 2014-03-06T17:28:08.570 回答