2011-07-09 19 views
0

この質問はthis oneに似ていますが、yyparseではyylexではありません。Bison/Yacc:yyparseはこのスコープで宣言されていません

私は今数時間これと戦ってきました!私はCプログラム(実際にはC++のもの)からyyparseを呼びたいと思っていますが、C++の新しいバージョンではなく古いflex/bisonを使ってしまいました。唯一のエラーは'yyparse' was not declared in this scopeです。変数をグローバルとして定義しようとしましたが、動作しないようです。

私が試したのFlexファイルで:バイソンファイル内

extern "C" { 
    int yyparse(); 
} 

と、この:

extern int yyparse(); 

が、それは何もしませんでした。

だから私は間違ってリンクしていると思います。問題は、makeファイルを自動的に作成するQtを使用しているため、再度上書きすることなく編集できないことです。リンクを変更せずに問題を解決する方法はありますか?そうでない場合、リンクはどのように行われるのですか?

+0

ファイル名とそれらを生成するエラーメッセージを表示する必要があります。あなたの質問から、あなたがC++コンパイラでBisonの出力をコンパイルしていて、 'yyparse()'の前の定義がないか、または問題がコード内にあるのかどうかは不明です。 'yyparse()'を呼び出します。 Bisonファイルに 'extern int yyparse();'宣言をどこに入れましたか?それはファイルの先頭の '%{...%}'セクションか他の場所にありますか? –

答えて

1

yyparseの宣言は、C++ファイルが宣言を必要とするため、flexまたはbisonファイルではなく、yyparseを呼び出すC++ファイルに含まれるヘッダーに挿入する必要があります。 bisonは生成するソースファイル内で必要な宣言を作成します。

関連する問題