【发布时间】:2011-08-26 14:34:19
【问题描述】:
我在 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
更新
首先:
Node.h // 用于节点类
yacc.y // rules + errorStruct + queue errQueue + class ErrList : 包括 "Node.h" &
然后:
Node.h // 用于节点类 + errorStruct + 队列 errQueue + 类 ErrList :包括
yacc.y // 规则:包括 "Node.h"
更新
在 Node.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(...);
并且没有声明类 ErrList 或 errQueue
【问题讨论】:
-
一个建议:SO 有一个非常有用的社区,但您需要通过以简约代码示例的形式发布所有相关信息来帮助社区帮助您。大多数时候这样做你会意识到错误是什么并从中学到很多东西,如果不是这样,它会帮助你更好地帮助你。发布不充分的信息会使 Q 陷入询问更多信息的循环,只会延迟整个过程,这对您和我们都不利。
-
是的,我还在学习,我会努力做得更好..谢谢
-
别含糊其辞,做个ace;写一个propertest-case!
-
我也可以添加这个页面吗? ;) catb.org/~esr/faqs/smart-questions.html