我正在努力学习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)) ===|
我为自己的第一个问题而道歉,但是由于我完全缺乏经验,我不知道从哪里开始。我不知道错误信息应该告诉我什么以及如何理解参考文献等等。所以如果有人能够解释这几条信息的不同含义,我会非常感激,例如&#39; nullpointr&#39;没有在这个范围内声明&#34; ...我试着找到答案已经问过并回答了,但我不知道怎么找到我需要的解释才能得到它。我想你只需要看到这个标题的代码,因为其他的没有错误......?这是(对于丑陋的代码感到抱歉,我复制的代码缩进了#34; {&#34;和&#34;}&#34;但是当粘贴它时,大部分都显示在左边:
#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
如果有人能帮助我,我将非常感激,谢谢。
答案 0 :(得分: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)
{}