ошибка LNK2001: неразрешенный внешний символ C ++

В моем коде VC ++, который раньше хорошо компилировался, я добавил функцию X (), например:

In the file BaseCollection.h
class Base
{
// code
virtual HRESULT X();
//code
};


IN the file DerivedCollection.h
class Derived:public Base
{
    HRESULT X();

}

In the file DerivedCollection.cpp
HRESULT Derived::X
{
// definition of Derived here. 
}

Также правильно включили файлы заголовков в файл .cpp. Но все же я не понимаю, по какой причине я получаю ошибку ссылки:

ошибка LNK2001: неразрешенный внешний символ «public: virtual long __thiscall Base :: X ()» (? X @ Base @@ UAEJI @ Z)

Я очень стараюсь исправить эту ошибку. Может ли кто-нибудь помочь мне решить эту проблему. Заранее большое спасибо.


person codeLover    schedule 23.04.2012    source источник


Ответы (2)


Вы реализовали X() в Base? Вам нужно сделать это или сделать это чисто виртуальным:

class Base
{
// code
virtual HRESULT X() = 0; //pure virtual. Base doesn't need to implement it.
//code
};

Кроме того, ваше определение X() в Derived выглядит неверным. Вероятно, вам понадобится что-то вроде этого:

HRESULT Derived::X()
{
// definition of Derived here. 
}
person juanchopanza    schedule 23.04.2012
comment
Да спасибо избавился от ошибок ссылок. :) Большое спасибо за такой быстрый ответ. - person codeLover; 23.04.2012

Вы никогда не определяете функцию X:

HRESULT Base::X()
{
// definition of X 
}

Вам также понадобится определение для Derived::X(), так как это тоже virtual.

person Luchian Grigore    schedule 23.04.2012
comment
Да спасибо избавился от ошибок ссылок. :) Большое спасибо за такой быстрый ответ. Надеюсь, что stackoverflow позволит выбрать оба ответа как правильные. :) - person codeLover; 23.04.2012