2011-07-09 65 views
0

此問題與this one類似,但對於yyparse而言,不是yylex。Bison/Yacc:yyparse未在此範圍內聲明

我一直在爲此奮鬥了幾個小時吧!我想從一個C程序調用yyparse(實際上是一個C++程序,但是我最終使用舊的flex/bison而不是新的C++ woops(甚至沒有意識到C++版本存在))。唯一的錯誤是'yyparse' was not declared in this scope。我試過將變量定義爲全局變量,但似乎並不奏效。

在Flex文件我想:

extern "C" { 
    int yyparse(); 
} 

,這在野牛文件:

extern int yyparse(); 

,但它沒有做任何事情。

所以..我想我錯了。問題是我正在使用自動構建make文件的Qt,所以如果沒有它再次被過度訓練,我不能編輯它。有沒有辦法解決這個問題而不改變鏈接?如果不是,那麼這個鏈接是如何完成的?

+0

您應該顯示生成它們的文件名和錯誤消息。從你的問題中不清楚問題是你是用C++編譯器編譯Bison輸出,並且抱怨沒有'yyparse()'的先前定義,或者問題出現在代碼中調用'yyparse()'。你在哪裏把'extern int yyparse()'聲明放在Bison文件中?它是在文件頂部的'%{...%}'部分,還是在其他地方? –

回答

1

yyparse聲明應該放在C++文件包含的頭文件中,該文件調用yyparse而不是flex或bison文件,因爲C++文件是需要聲明的文件。野牛將在它生成的源文件中創建它需要的聲明。