代码之家  ›  专栏  ›  技术社区  ›  Groosha

类方法[duplicate]上的“必须调用对非静态成员函数的引用”

c++
  •  0
  • Groosha  · 技术社区  · 6 年前

    std::thread 类来运行要并行执行的类的成员函数。

    头文件的代码类似于:

    class SomeClass {
        vector<int> classVector;
        void threadFunction(bool arg1, bool arg2);
    public:
        void otherFunction();
    };
    

    void SomeClass::threadFunction(bool arg1, bool arg2) {
        //thread task
    }
    
    void SomeClass::otherFunction() {
        thread t1(&SomeClass::threadFunction, arg1, arg2, *this);
        t1.join();
    }
    

    我使用的是Mac OS X 10.8.3下的Xcode 4.6.1。我使用的编译器是Apple llvm4.2,它与Xcode一起提供。

    上面的代码不起作用。编译器错误显示 "Attempted to use deleted function" .

    In instantiation of function template specialization 'std::__1::thread::thread<void (SomeClass::*)(bool, bool), bool &, bool &, FETD2DSolver &, void>' requested here
    

    在C++ 11和线程类中,我是新手。有人能帮我吗?

    0 回复  |  直到 9 年前
        1
  •  22
  •   Kerrek SB    11 年前

    实例应该是第二个参数,如下所示:

    std::thread t1(&SomeClass::threadFunction, *this, arg1, arg2);
    
        2
  •  1
  •   Darren Cook    9 年前

    我仍然对上面的答案有问题(我想它是在抱怨它不能通过智能指针复制?),因此用lambda重新表述:

    void SomeClass::otherFunction() {
      thread t1([this,arg1,arg2](){ threadFunction(arg1,arg2); });
      t1.detach();
    }
    

    (注:我也变了 join() detach()