我是将我的课程附加到flex的搜索方式。如果我得到令牌,我需要数数。代码如下,其中stateMap - 其他类。 g ++无法使用“error:'statTable'在此范围内声明”来编译它。 如果没有野牛我该怎么做?
%{
#include "mapstat.h"
...
}%
%%
{some pattern} {
int i=0,key,count;
while(yytext[i]!=' '){
lineNumber[i]=yytext[i];
++i;
}
lineNumber[i]=0;
key=atoi(lineNumber);
count=statTable->find(key);
}
%%
int main(int argc, char *argv[]) {
mapStat *statTable=new mapStat;
...
}
答案 0 :(得分:1)
对于这个特殊用例,我认为使statTable
成为一个全局变量是合理的(在main函数之外声明,并在调用yylex()
函数之前对其进行初始化:
%{
#include "mapstat.h"
extern mapStat* statTable;
// ...
}%
mapStat* statTable = NULL;
int main(int argc, char *argv[]) {
statTable=new mapStat;
// ...
}
你应该考虑使用单例类来实现语义的更多封装和statisics功能的访问(这是一种罕见的有效用例)。