2016-12-30 43 views
-4

我想學習C++,所以我爲這個愚蠢的問題表示歉意,如果我剛剛得到這個基本的東西,很多東西都會變得清晰......我遵循一個指南來創建一個鍵盤記錄器,用來教C++ 。但解釋是太弱,寫程序酷似指示,並嘗試調試後,我得到:這些錯誤消息告訴我什麼?

|=== Build: Debug in test (compiler: GNU GCC Compiler) ===| 
:\example\test\test\Timer.h|14|error: 'nullpointr' was not declared in this scope| 
:\example\test\test\Timer.h||In constructor 'Timer::Timer(const std::function<void()>&, const long unsigned int&, long int)':| 
:\example\test\test\Timer.h|44|error: no match for call to '(std::chrono::milliseconds {aka std::chrono::duration<long long int, std::ratio<1ll, 1000ll> >}) (std::chrono::milliseconds)'| 
:\example\test\test\Timer.h|45|error: expression cannot be used as a function| 
|=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| 

我爲我的第一個問題道歉不被構造良好的,但我不知道在哪裏因爲我完全缺乏經驗。我無法確定錯誤信息應該告訴我什麼,以及如何理解引用等,所以如果有人能夠解釋這些消息的不同含義,比如'nullpointr'未在此範圍內聲明,我將非常感激「...... I嘗試在已經提問和回答的地方找到答案,但是我不知道如何找到我需要的解釋。我想你只需要看看這個頭文件的代碼,因爲其他的錯誤是免費的......?它是(對於醜陋的代碼對不起,我複製的代碼有縮進「{」和「}」,但粘貼時它表現出他們大多一路左:

#ifndef TIMER_H 
#define TIMER_H 

#include <thread> 
#include <chrono> 

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 = nullpointr; 

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 

如果有人可以幫助我我將非常感謝,謝謝。

+1

這是'nullptr',不'nullpointr' :) – Rakete1111

+0

如果你張貼在這裏,請確保您的代碼編譯 - 尤其是,#包括所有標題這將使它如此。 –

+0

你正在編譯使用'g ++'或'gcc'嗎?當您使用C++語言時,喜歡使用'g ++'。 –

回答

3

第一個錯誤是告訴你nullpointr未定義。您可能有意使用nullptr,它是C++語言的一部分。

其他兩個錯誤處理您的第三個構造函數。看起來你已經在構造函數中放置了兩個成員初始值設定項,並且在那個項目中做了錯誤的處理。

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) {} 
              } 

你可能想要的是:

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