Проблема с линковкой при использовании stl в VS2005 - PullRequest
0 голосов
/ 20 апреля 2009

Я только что добавил использование STL в некоторый код и получаю эту ссылку:

ошибка LNK2019: неразрешенный внешний символ "public: __thiscall std :: _ Lockit :: ~ _Lockit (void)"

Я, должно быть, что-то упустил в ссылке, я делал это раньше - и поиск в Google не помог до сих пор. хмм ......

Вот фрагмент кода:

#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 голосов
/ 20 апреля 2009

Ошибка очищает говорит: std :: _ Lockit является объявлено , но НЕ определено .

Пожалуйста, опубликуйте определение "std :: _ Lockit", если вы реализовали его. Если кто-то еще сделал это, то вы забыли связать файл library , но просто включили файл header .

0 голосов
/ 20 апреля 2009

Деструктор действительно где-нибудь реализован? Если нет, то это ваша проблема. Список пытается вызвать деструктор для содержащихся элементов, когда они удалены, и если деструктор фактически нигде не существует, вы получите ошибку компоновщика.

0 голосов
/ 20 апреля 2009

Может быть, у вас есть опции компилятора, настроенные на многопоточность, пока компоновщик пытается соединиться с однопоточной стандартной библиотекой. Несоответствие в модели многопоточности или #define s, связанных с многопоточностью, часто являются причиной проблем в классах, имеющих «блокировку» в имени ...

0 голосов
/ 20 апреля 2009

Если возможно, оставьте свой код. Также взгляните на эту внешне связанную проблему на форумах MSDN. Используете ли вы какие-либо заголовки старого стиля и т. Д.

0 голосов
/ 20 апреля 2009

Одной из возможных причин является то, что вы объявили свой деструктор для класса _Lockit, но не реализовали его.

Реализована ли вами _Lockit?

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: это тебе помогает?

...