「未定義の参照エラー」という質問が何度か寄せられましたが、問題の解決策が見つかりませんでした。
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);
、tearDownBuffer(void* buffer);
およびについても同様のエラーが発生しnextToken();
ます。基本的に、iclexer.cの関数が正しくリンクされていません。
このコードを変更する方法、または Qt (Qt Creator) でリンク順序を変更する方法を教えてください。