Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Linker Tools Error LNK2019 при работе с абстрактным классом

1.8K
21 декабря 2005 года
DanilovYV
41 / / 14.10.2002
есть абстрактный класс: PROJECT::Components::sDispenserImpl

для теста его методов создаю консоль: 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++
9.7K
21 декабря 2005 года
DaemonDZK
59 / / 08.11.2005
Абстрактный класс потому и абстрактный что его экземпляр создать нельзя. Конкретизируй класс.
1.8K
21 декабря 2005 года
DanilovYV
41 / / 14.10.2002
Цитата:
Originally posted by DaemonDZK
Абстрактный класс потому и абстрактный что его экземпляр создать нельзя. Конкретизируй класс.



у меня здесь цепочка наследуемых классов так сказать, а тестировать надо методы последнего (sDispenserImpl)

что конкретизировать то?
поясните, пожалуйста.

1.8K
21 декабря 2005 года
DanilovYV
41 / / 14.10.2002
и кстати, если писать:

Components::sDispenserImpl *Cdm;
//Cdm = new PROJECT::Components::sDispenserImpl();

то нет ошибки..
объясните новичку..
22K
09 января 2007 года
js_cpp
5 / / 05.01.2007
Все верно.
Абстрактный класс именуется абтсрактным потому, что в нем зарегистрировн 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, заполняя неизветные члены духами или фантазиями*/
}
4.1K
09 января 2007 года
GRIENDERS
117 / / 06.06.2006
Цитата: js_cpp

.....
public:
void execute() = 0;
};


ТЫ имел ввиду

 
Код:
virtual void execute()=0;

Абстрактный класс создается для того, чтобы быть интерфейсом для наследумых классов.Это возможно т к чистые виртуальные функции не требуют определения, можно ограничиться лишь объявлением
Цитата: js_cpp

Абстрактный класс именуется абтсрактным потому, что в нем зарегистрировн 0-ой метод


Чисто виртуальная функция

309
09 января 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
test_dispenser error LNK2019: unresolved external symbol "public: __thiscall PROJECT::Components::sDispenserImpl::sDispenserImp l(void)" (??0sDispenserImpl@Components@PROJECT@@QAE@XZ) referenced in function _main


Одно из двух - или компилятор кривой, или же метод не указан, как абстрактный ("virtual Результат Имя_Метода (Параметры) = 0;"). Как следствие - метод абстрактным не считается, но его реализация отсутствует.

Потому что, например, Builder при попытке создания объекта без переопределённых "нулевых" методов, ещё на этапе компиляции явно говорит программисту "не могу создать объект абстрактного класса".

22K
10 января 2007 года
js_cpp
5 / / 05.01.2007
Цитата: GRIENDERS
ТЫ имел ввиду
 
Код:
virtual void execute()=0;

Абстрактный класс создается для того, чтобы быть интерфейсом для наследумых классов.Это возможно т к чистые виртуальные функции не требуют определения, можно ограничиться лишь объявлением

Чисто виртуальная функция



Шляпы долой!

Как-то вычитал, что-то вроде "если глючит компилятор, отойди от РС, попей кофе, поспи, наконец. А потом спроси себя что я сделал не так и почему. Уверен, что первым откажет прогер"

22K
10 января 2007 года
js_cpp
5 / / 05.01.2007
PS забыл сказать ЧИТАЙТЕ АННАЛЫ. Обычно их пишут умные люди. Или хотя бы опытные
4.1K
10 января 2007 года
GRIENDERS
117 / / 06.06.2006
Цитата: js_cpp
PS забыл сказать ЧИТАЙТЕ АННАЛЫ. Обычно их пишут умные люди. Или хотя бы опытные


Ребята, кто нибудь понял что он сказал? Я - вообще ни слова

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог