我正在尝试编译旧的C ++代码库,而不是我编写的,并且我收到以下错误:
'exit' was not declared in scope.
给我错误的代码位于文本的顶部,如下所示:
%{
#include "AppHdr.h"
#include "libutil.h"
#include "levcomp.h"
#include <cstdio>
#include <cstdlib>
int yylex();
extern int yylineno;
void yyerror(const char *e)
{
std::fprintf(stderr, "%s:%d: %s\n", lc_desfile.c_str(), yylineno, e);
// Bail bail bail.
std::exit(1);
}
显然,此问题与makefile调用的编译器(g++
)中的更改有关。我相信我应该通过在文件中放置一个#include <cstdlib>
)来解决这个问题,这就是我一直在尝试的......但无论在哪里我把它放在%{
之前,其余的#include
,在yyerror()
函数本身内 - 没有任何效果。
发生了什么,以及如何解决此问题以及此类错误,最好是尽可能少地篡改代码库?
编辑:哦,这是我g++ --version
的输出:
g++ (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
如果重要,这是一个.ypp文件。