Linker Tools Error LNK2019 при работе с абстрактным классом
для теста его методов создаю консоль: test_dispenser
определяю переменную класса:
PROJECT::Components::sDispenserImpl *Cdm = new PROJECT::Components::sDispenserImpl();
при build такая ошибка:
test_dispenser error LNK2019: unresolved external symbol "public: __thiscall PROJECT::Components::sDispenserImpl::sDispenserImpl(void)" (??0sDispenserImpl@Components@PROJECT@@QAE@XZ) referenced in function _main
подскажите что делать? я новичок в Microsoft Visual C++
Абстрактный класс потому и абстрактный что его экземпляр создать нельзя. Конкретизируй класс.
у меня здесь цепочка наследуемых классов так сказать, а тестировать надо методы последнего (sDispenserImpl)
что конкретизировать то?
поясните, пожалуйста.
Components::sDispenserImpl *Cdm;
//Cdm = new PROJECT::Components::sDispenserImpl();
то нет ошибки..
объясните новичку..
Абстрактный класс именуется абтсрактным потому, что в нем зарегистрировн 0-ой метод:
class Abst{//Abst формирует интерфейс для семейства классов с общим предком
public:
void execute() = 0;
};
class Real :: public Abst{
public:
void execute();
};
inline void Real::execute(){int a = 0;}
Abst *abst;//просто формируется переменная, адрес которой NULL
Real *real;//аналогично
abst = new Real;//возможно, но с обрезкой до Abst
real = new Abst;//ошибка: NULL метод.
real = abst;//со всеми вытекающими
void f(Abst *a)
{
a->execute();//знаем только методы Abst получаем значения из vtbl
Real *re = xxx_cast<Real*>(a);/*фантазируем на тему Real, заполняя неизветные члены духами или фантазиями*/
}
.....
public:
void execute() = 0;
};
ТЫ имел ввиду
Абстрактный класс создается для того, чтобы быть интерфейсом для наследумых классов.Это возможно т к чистые виртуальные функции не требуют определения, можно ограничиться лишь объявлением
Абстрактный класс именуется абтсрактным потому, что в нем зарегистрировн 0-ой метод
Чисто виртуальная функция
Одно из двух - или компилятор кривой, или же метод не указан, как абстрактный ("virtual Результат Имя_Метода (Параметры) = 0;"). Как следствие - метод абстрактным не считается, но его реализация отсутствует.
Потому что, например, Builder при попытке создания объекта без переопределённых "нулевых" методов, ещё на этапе компиляции явно говорит программисту "не могу создать объект абстрактного класса".
Абстрактный класс создается для того, чтобы быть интерфейсом для наследумых классов.Это возможно т к чистые виртуальные функции не требуют определения, можно ограничиться лишь объявлением
Чисто виртуальная функция
Шляпы долой!
Как-то вычитал, что-то вроде "если глючит компилятор, отойди от РС, попей кофе, поспи, наконец. А потом спроси себя что я сделал не так и почему. Уверен, что первым откажет прогер"
Ребята, кто нибудь понял что он сказал? Я - вообще ни слова