0

RAOperatoryacc を使用して 1 つのファイルを解析し、yacc を使用してクラス オブジェクトにレコードを格納しています。対応するヘッダー ファイルを yacc ファイルにRAOperatorインクルードし、yacc ファイルの %union ディレクティブでオブジェクトへのポインターを定義しました。しかし、コンパイルすると、次のようなエラーが発生します。

exp.y:12:28: error: expected type-specifier before ‘;’ token

RAoperatorクラスでユニオンを使ったyaccファイルを添付します。

%{

#include "RA.h"
#include"y.tab.h"

%}

%union
{
char *strng;
vector<string>  *atr;
RAoperator* asdf;              // This is where error is shown
vector < vector <string> > *table;
}

これは、RAoperator が定義されている RA.h ファイルです。

class RAoperator
{
public:
vector< vector<string> > RArelation;
vector< vector<string> > RAattr;
};

必要なすべてのヘッダー ファイルを RA.h ファイルに含めました。

このエラーをよく検索しましたが、解決策が見つかりませんでした。

どこで間違ったのですか?

4

2 に答える 2

0

問題は、yacc がファイルから%{...%}コードを配置する場所に関係してい.yます。ファイルには含まれていますが、.tab.cファイルには含まれていません.tab.h。したがって、他のコードがある場合は#include "y.tab.h"、それも最初にする必要があります。そうしないと、(まだ)定義されていない#include "RA.h"ためにこのようなエラーが発生しますRAoperator

bison では、%code requires {...を使用して、とファイル}の両方にコピーする C コードを指定できます。 .tab.c.tab.h

于 2013-09-11T22:53:12.600 に答える