尽管多次询问“未定义的引用错误”问题,但我找不到解决问题的方法。
我正在尝试让 flex 和 bison 在 Qt 应用程序中工作。我仅在链接方面面临问题。
这些是相关文件-
1) icd.l - Lex 规范 - 它生成iclexer.c并包含函数定义 -
void yyerror(char const *s){...}
void* setUpBuffer(char const* text){...}
void tearDownBuffer(void* buffer){...}
int nextToken(){...}
2) iclexer.h
#ifndef ICLEXER_H
#define ICLEXER_H
extern void yyerror(char const *);
extern int yylex();
extern char* yytext;
extern void* setUpBuffer(char const* text);
extern void tearDownBuffer(void* buffer);
extern int nextToken();
#endif // ICLEXER_H
3) icparser.h
#ifndef ICPARSER_H
#define ICPARSER_H
#include "iclexer.h"
#include <string>
extern void initLexer(std::string const& t);
extern void clearLexer();
extern int yyparse();
class Parser
{
public:
Parser(std::string const& s)
{
initLexer(s);
}
void parse()
{
yyparse();
}
~Parser()
{
clearLexer();
}
};
#endif // ICPARSER_H
4) icd.y - Bison 规范 - 它生成icparser.cpp并包含函数定义 -
void initLexer(std::string const& t);
void clearLexer();
int yylex();
在我的 GUI 代码中,我包含icparser.h并使用class Parser
的界面。但我收到以下错误-
/home/vinayak/codes/qt/dic_sim/icparser.cpp:1402:
错误:未定义对“yyerror(char const *)”的引用
和setUpBuffer(char const* text);
的类似错误。基本上iclexer.c中的函数没有正确链接。tearDownBuffer(void* buffer);
nextToken();
请告诉我如何修改此代码或如何更改 Qt(Qt Creator)中的链接顺序?