首页 文章

c多线程类方法

提问于
浏览
0

我有以下问题 .

vector<thread> vThreads;

list<Crob *> lRobs;
list<Crob *>::iterator i;

for(i = lRobs.begin(); i != lRobs.end(); i++)
{
    vThreads.push_back(thread((*i)->findPath));
}

我想将方法findPath传递给一个线程,但我只是遇到了很多错误......

> labrob.cpp: In function ‘int main(int, char**)’:
labrob.cpp:72:43: error: no matching function for call to ‘std::thread::thread(<unresolved overloaded function type>)’
labrob.cpp:72:43: note: candidates are:
In file included from labrob.cpp:14:0:
/usr/include/c++/4.7/thread:131:7: note: std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (Crob::*)(); _Args = {}]
/usr/include/c++/4.7/thread:131:7: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (Crob::*&&)()’
/usr/include/c++/4.7/thread:126:5: note: std::thread::thread(std::thread&&)
/usr/include/c++/4.7/thread:126:5: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘std::thread&&’
/usr/include/c++/4.7/thread:122:5: note: std::thread::thread()
/usr/include/c++/4.7/thread:122:5: note:   candidate expects 0 arguments, 1 provided
make: *** [labrob.o] Error 1

我已经尝试传递本地函数,并且没有问题...

Added CRob header

#pragma once
#include "point.hpp"
#include "lab.hpp"

class Crob
{
  protected:
   Cpoint *pos;
   int steps;
   Clab *labfind;
   string direction;

  public:
   Crob(Clab *lab);
   virtual ~Crob();
   virtual void findPath(); 
   void moveTo(int x, int y);   
   void moveToPrint(int x, int y);  
   int getSteps(void);
   void checkDirection();
};

1 回答

  • 1

    看起来你正在尝试将非静态方法传递给std :: thread构造函数 . 你不能这样做:非静态方法需要一个对象,因此可以调用它 . 看起来你想要:

    for(i = lRobs.begin(); i != lRobs.end(); i++)
    {
        vThreads.push_back(std::thread(&Crob::findPath, *i));
    }
    

相关问题