【问题标题】:Creating a thread in NachOS using a C++ class使用 C++ 类在 NachOS 中创建线程
【发布时间】:2014-04-09 11:17:28
【问题描述】:
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()方法的函数指针。编译器给了我“无效使用非静态成员函数”。这里的错误在哪里?

【问题讨论】:

    标签: c++ nachos


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 2017-01-09
      • 1970-01-01
      • 2014-10-27
      • 2018-09-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多