ошибка C2064: термин не оценивает функцию, принимающую 0 аргументов thread.hpp (60) - PullRequest
1 голос
/ 20 февраля 2012

Я создаю игровой сервер C ++.Сервер создает много объектов monster, и каждый monster должен иметь свой поток с определенной функцией.

Я получаю ошибку:

 error C2064: term does not evaluate to a function taking 0 arguments
 thread.hpp(60) : while compiling class template member function 'void  
  boost::detail::thread_data<F>::run(void)'

monster.cpp:

#include "monster.h"

monster::monster(string temp_mob_name)
{
    //New login monster
    mob_name = temp_mob_name;
    x=rand() % 1000;
    y=rand() % 1000;

        boost::thread make_thread(&monster::mob_engine);
} 

monster::~monster()
{
    //Destructor
}

void monster::mob_engine()
{
    while(true)
    {
         Sleep(100);
         cout<< "Monster name"<<mob_name<<endl;
    }
}

monster.h:

#ifndef _H_MONSTER_
#define _H_MONSTER_

//Additional include dependancies
#include <iostream>
#include <string>
#include "boost/thread.hpp"
using namespace std;

class monster
{
    public:
    //Functions
    monster(string temp_mob_name);
    ~monster();
    //Custom defined functions
    void mob_engine();

    int x;
    int y;
};

//Include protection
#endif

1 Ответ

5 голосов
/ 20 февраля 2012

mob_engine - нестатическая функция-член, поэтому она имеет неявный аргумент .

Попробуйте это:

boost::thread make_thread(boost::bind(&monster::mob_engine, this));

В соответствии с этим похожим вопросом boost: thread - ошибка компилятора , вы даже можете избежать использования bind , просто написав:

boost::thread make_thread(&monster::mob_engine, this);

Кроме того, вы, вероятно, захотите объявить переменную члена boost :: thread, чтобы сохранить ссылку на поток.

...