在VS2005中使用stl时出现问题链接

时间:2009-04-20 17:29:43

标签: visual-c++ stl visual-studio-2005 linker

我刚刚将STL用法添加到某些代码中,我收到此链接错误:

错误LNK2019:未解析的外部符号“public:__thiscall std :: _ Lockit ::〜_Lockit(void)”

我必须在链接中遗漏一些东西,我之前已经这样做了 - 谷歌搜索到目前为止没有帮助。 HMM ......

以下是代码段:

#pragma once
#include "Observer.h"
#include <list>

class NGE_Observable
{
public:
    Observable(void);
    virtual ~Observable(void);
    void    RegisterObserver(Observer *pObserver, void *user);
    void    UnRegisterObserver(Observer *pObserver);
    void    NotifyObservers();

private:
    std::list<Observer *>    observers;
};

已回答!:操作员错误 - 呃。我已将项目属性设置为忽略所有默认库,因此未链接stl库。我很困惑,因为我只收到一条错误消息,但是当我添加了stl调用时,链接错误增加了。

5 个答案:

答案 0 :(得分:0)

一个可能的原因是你为类_Lockit声明了析构函数,但是你没有实现它。

您是否实施了_Lockit?

LATER EDIT: this会帮助你吗?

答案 1 :(得分:0)

当链接器尝试链接到单线程标准库时,您可能已将编译器选项设置为多线程。线程模型或线程相关#define中的不一致通常是在名称中具有“锁定”的类中出现问题的原因...

答案 2 :(得分:0)

如果可能,请发布您的代码。另请参阅MSDN论坛上this看似相关的问题。你在使用任何旧式标题等吗?

答案 3 :(得分:0)

析构函数是否实际在任何地方实现?如果没有,那就是你的问题。列表尝试在删除时调用包含元素的析构函数,如果析构函数实际上不存在于任何地方,则会出现链接器错误。

答案 4 :(得分:0)

错误清除说:std :: _ Lockit 声明未定义

如果已实施,请发布“std :: _ Lockit”的定义。如果其他人将其删除,则您忘记链接文件,但只包含标题文件。