C++11 SIGINT未在此作用域中声明
背景 我正在尝试为运行在Raspberry 3上的Rasbian构建一个示例REST api应用程序。我使用了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 {
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
丢失了感谢您的建议,我尝试了,但仍然得到了相同的错误。但是,当我包含
时,错误得到了解决。如果有人详细说明,我将不胜感激。