悬赏VS2005中使用vector iterator导致链接错误2001的问题,卡了我3天了
同样一个工程,VS2003下编译无任何问题,MT 多线程。链接生成EXE。
到了VS2005下,编译没问题,链接产生一堆错误:
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::_Vector_iterator<class Node *,class std::allocator<class Node *> > __thiscall Node::child_end(void)" (__imp_?child_end@Node@@QAE?AV?$_Vector_iterator@PAVNode@@V?$allocator@PAVNode@@@std@@@std@@XZ),该符号在函数 "public: virtual void __thiscall CBulletLayer::update(float)" (?update@CBulletLayer@@UAEXM@Z) 中被引用
代码中使用到这个一个导出类:
///////////////////////////////////////////////////////////
class Xlbe_Export Node
{
public:
typedef std::vector<Node *> Nodes;
typedef std::vector<Action *> Actions;
public:
Node();
virtual ~Node();
。。。。。
};
导致只要是用到vector的 iterator 都会导致出现这个问题。
怀疑是对STL的支持不一致;把 VS2003的VECTOR文件复制过来,可以编译,但是运行出错:std_bad_alloc 这个问题卡了我3天了!不信就我一个人遇到过! stl Visual?Studio?2005 Iterator 无法解析的外部符号 多线程
[解决办法]
不用MT,用MTD试试呢
[解决办法]
导出类是一个lib库?如果是这样的话,必须用相同版本的VS编译那个lib
不同的VS,标准库是有差异的
[解决办法]
这是比较规范的做法,不然问题太多
[解决办法]
DLL用2003 编译的,然后在2005 下链接?DLL还导出类呢,死得也算明白明白,只是死得很惨!!为什么要跨环境使用?
如果非要跨环境使用,不能导出接口吗?或者纯粹点,做成一个COM模块?
[解决办法]
配置属性-VC++目录,调整一下“包含目录”、“引用目录”、“库目录”中的顺序。
可能因版本因素引发的问题多使用此解决方案。
[解决办法]
跨版本可能因为不同设置,导致的。。