C++11 SIGINT未在此作用域中声明

C++11 SIGINT未在此作用域中声明,c++11,makefile,cmake,raspbian,cpprest-sdk,C++11,Makefile,Cmake,Raspbian,Cpprest Sdk,背景 我正在尝试为运行在Raspberry 3上的Rasbian构建一个示例REST api应用程序。我使用了cpprestsdk 示例包含以下头文件: #include <condition_variable> #include <mutex> #include <iostream> static std::condition_variable _condition; static std::mutex _mutex; namespace cfx {

背景

我正在尝试为运行在Raspberry 3上的Rasbian构建一个示例REST api应用程序。我使用了
cpprestsdk

示例包含以下头文件:

#include <condition_variable>
#include <mutex>
#include <iostream>

static std::condition_variable _condition;
static std::mutex _mutex;

namespace cfx {
    class InterruptHandler {
    public:
        static void hookSIGINT() {
            signal(SIGINT, handleUserInterrupt);        
        }

        static void handleUserInterrupt(int signal){
            if (signal == SIGINT) {
                std::cout << "SIGINT trapped ..." << '\n';
                _condition.notify_one();
            }
        }

        static void waitForUserInterrupt() {
            std::unique_lock<std::mutex> lock { _mutex };
            _condition.wait(lock);
            std::cout << "user has signaled to interrup program..." << '\n';
            lock.unlock();
        }
    };
}
#包括
#包括
#包括
静态标准::条件变量条件;
静态std::mutex\u mutex;
名称空间cfx{
类中断处理程序{
公众:
静态void hookSIGINT(){
信号(SIGINT、handleUserInterrupt);
}
静态无效手动中断(int信号){
如果(信号==SIGINT){

std::cout您没有包括signal.h

您包括一些C++标准库头,并且作为对MACOS的副作用,这些事件包含了信号.h。然而,这并没有指定发生,所以您不能依赖于在这些报头的不同实现中工作。

尝试添加:

#include <signal.h>
#包括

在顶部。

在Linux上,要包含的头文件是

#include <signal.h>
#include <csignal.h>
#包括
在MacOS上,要包含的等效头文件是

#include <signal.h>
#include <csignal.h>
#包括

根据您的操作系统,头文件总是会发生变化。它们应该都做相同的事情,尽管

发出信号。h
丢失了感谢您的建议,我尝试了,但仍然得到了相同的错误。但是,当我包含
时,错误得到了解决。如果有人详细说明,我将不胜感激。