我有以下lex.l文件。
%{
#include <stdio.h>
#include <stdlib.h>
#define AND 1
#define BEGINN 2
&}
/* regular definitions */
ws [ \t\n]+
letter [A-Za-z]
/* more declarations */
%%
{ws}
{id} {yylval = (int) storeLexeme(); return(ID);}
{num} {yylval = (int) storeInt(); return(NUM);}
/* more rules */
%%
int storeLexeme() {
/* function implementation */
}
int storeInt() {
/* function implementation */
}
我使用flex运行此文件,并使用gcc编译,但使用g ++报告以下错误。
lex.l:110: error: `storeLexeme' undeclared (first use this function)
lex.l:110: error: (Each undeclared identifier is reported only once for each function
it appears in.)
lex.l:111: error: `storeInt' undeclared (first use this function)
lex.l: In function `int storeLexeme()':
lex.l:117: error: `int storeLexeme()' used prior to declaration
lex.l: In function `int storeInt()':
lex.l:121: error: `int storeInt()' used prior to declaration
如何解决这些错误?
答案 0 :(得分:1)
你必须先申报。更改第一部分:
%{
#include <stdio.h>
#include <stdlib.h>
#define AND 1
#define BEGINN 2
int storeLexeme(void);
int storeInt(void);
%}
另外,如果你只需要在那个文件中使用这些函数(如果它们没有在标题中声明的话可能就是这种情况),你可能应该声明它们static
,或者在匿名命名空间中你正在使用C ++。