我在 yacc.y 中有 struct errorStruct 和一个队列 errQueue 定义,然后将其移动到单独的 .h 文件中
,但它给了我链接错误,即在 yacc.obj 和 node.obj 中都找到了该定义!
尝试创建新解决方案但仍然给出相同的错误
Error 9 error LNK2005: "class std::queue<struct errorStruct,class std::deque<struct
errorStruct,class std::allocator<struct errorStruct> > > errQueue" (?errQueue@@3V?$queue@UerrorStruct@@V?
$deque@UerrorStruct@@V?$allocator@UerrorStruct@@@std@@@std@@@std@@A) already defined in Node.obj yacc.obj
更新
first :
Node.h // 用于节点类
yacc.y // rules + errorStruct + queue errQueue + class ErrList : 包括 "Node.h" & <queue>
然后:
Node.h // 用于节点类 + errorStruct + 队列 errQueue + 类 ErrList :包括 <queue>
yacc.y // 规则:包括“Node.h”
更新
在节点.h
struct errorStruct{
int errLineNum;
int errColNum ;
char * errMessage;
};
class ErrList{
public:
void pushError(int line,int col,char * message);
void popError();
void printErrors();
int getSize();
private :
queue <errorStruct> errQueue;
};
externErrList * se = new ErrList ();
Node.h 的其余部分与 yacc.y 中的此类无关,
只是使用
se->pushError(...);
and 作为类 ErrList 或 errQueue 的声明