2012-02-20 11 views
1

私はC++ゲームサーバーを作成しています。サーバは多くのオブジェクトmonsterを作成し、すべてのmonsterは特定の機能を持つスレッドを持つ必要があります。エラーC2064:用語が0引数を取る関数に評価されないthread.hpp(60)

私はエラーを取得する:

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 

答えて

5

mob_engineは、非静的メンバ関数であるので、暗黙のこのを持っています引数。

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

はまた、あなたはおそらく、ブーストを宣言することになるでしょう。これと同様の質問boost:thread - compiler errorあなたも簡単に書き込むことでバインドの使用を避けることができますによると

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

はこれを試してみてください。 :threadへの参照を保持するためのthreadメンバ変数。

関連する問題