这些错误消息告诉我什么?

时间:2016-12-30 22:08:11

标签: c++

我正在努力学习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

如果有人能帮助我,我将非常感激,谢谢。

1 个答案:

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