使用C ++类在NachOS中创建线程

时间:2014-03-06 16:54:40

标签: c++ nachos

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

1 个答案:

答案 0 :(得分:0)

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

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

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

查看this question及其最佳答案,了解如何做您正在寻找的事情。