2017-08-26 1 views
-5
C:\Users\hp\Desktop\Timer.h|77|error: no matching function for call to 
'std::thread::thread(<unresolved overloaded function type>, Timer* const)'| 

これは私が構築しようとすると、誰もが感謝を助けることができるならば、私はUdemyのコースを以下ました、私は、C++に関する多くの知識を持っていけない取得エラーです作業!また プロジェクト全体のコードgithubの上で見つけることができる:https://github.com/creator69/keylogger-私はUdemyクラスを以下ましたが、コードイマイチが

それがエラーを与えているコード:

#ifndef TIMER_H 
#define TIMER_H 

#include <chrono> 
#include <thread> 

class Timer { 

    std::thread Thread; 

    bool Alive = false; 

    long CallNumber = -1L; 

    long repeat_count = -1L; 

    std::chrono::milliseconds interval = std::chrono::milliseconds(0); 

    std::function<void(void)> funct = nullptr; 

    void SleepAndRun() { 

     std::this_thread::sleep_for(interval); 
     if (Alive) 
      Function()(); 
    } 

    void ThreadFunc() { 

     if (CallNumber == Infinite) 
      while (Alive) 
       SleepAndRun(); 
     else 

      while (repeat_count--) 
       SleepAndRun(); 
    } 

    public: 
    static const long Infinite = -1L; 

    Timer() {} 

    Timer(const std::function<void(void)> &f) : funct(f) {} 

    Timer(const std::function<void(void)> &f, const unsigned long &i, const long repeat = Timer::Infinite) 
      : funct(f), interval(std::chrono::milliseconds(i)), CallNumber(repeat) {} 

    void Start(bool Async = true) { 

     if (IsAlive()) 
      return; 

     Alive = true; 

     repeat_count = CallNumber; 

     if (Async) 
      Thread = std::thread(ThreadFunc, this); 
     else 
      this->ThreadFunc(); 
    } 

    void Stop() { 

     Alive = false; 

     Thread.join(); 
    } 
    void SetFunction(const std::function<void(void)> &f) { funct = f; } 
    bool IsAlive() const { return Alive; } 
    void RepeatCount(const long r) { 

     if (Alive) 
      return; 
     CallNumber = r; 
    } 

    long GetLeftCount() const { return repeat_count; } 

    long RepeatCount() const { return CallNumber; } 
    void SetInterval(const unsigned long &i) { 

     if (Alive) 
      return; 
     ; 

     interval = std::chrono::milliseconds(i); 
    } 

    unsigned long Interval() const { return interval.count(); } 

    const std::function<void(void)> &Function() const { return funct; } 
}; 

#endif 

答えて

0
Thread = std::thread(ThreadFunc, this); 

にメンバ関数へのポインタを渡す正しい方法std::threadのコンストラクタは次のとおりです。

Thread = std::thread(&Timer::ThreadFunc, this); 
関連する問題