尽管“未定义的引用错误”问题已多次提出,但我无法找到解决问题的方法。即使函数存在,但未定义的引用错误
我想让flex和野牛在Qt应用程序中工作。我只在连接时遇到问题。
这些相关文件 -
1)icd.l - 莱克斯规范 - 它产生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 - 野牛规范 - 它产生icparser.cpp和包含的职能 -
void initLexer(std::string const& t);
void clearLexer();
int yylex();
定义以我GUI代码我包括icparser.h和使用class Parser
的界面。但我得到以下的setUpBuffer(char const* text);
,tearDownBuffer(void* buffer);
和nextToken();
无差错
/home/vinayak/codes/qt/dic_sim/icparser.cpp:1402:
error: undefined reference to `yyerror(char const*)'
而且类似的错误。基本上iclexer.c中的功能没有正确链接。
请告诉我如何修改此代码或如何更改Qt(Qt Creator)中的链接顺序?
你编译和链接所有的二进制文件?你在C语言中使用'extern“C”'吗? –
@DavidRodríguez-dribeas:所有的文件都被添加到项目中,所以我相信 - 所有的二进制文件都被编译和链接。不,我不在任何地方使用'extern“C”'。 –