Перейти к содержанию
    

Таблица виртуальных функций

Есть базовый класс с виртуальными методами - class A.

 

class A
{
 public:
   virtual ~A() {}

   // Виртуальные функции
   virtual void Get_A() { }
   virtual void Get_B() { }	                       
   ....


 protected:

}

 

 

От него производный класс, в котором уже подробно расписываю виртуальные функции.

 

class B : public A
{
 public:

   B() { }

   ~B() { }

   virtual void Get_A();
   virtual void Get_B();	                       
   ...

 private: 

}

 

Инициализирую через указатель и new.

 

A *pPointer;

pPointer = new B;

 

Далее работаю с указателем, описание класса A находиться в хедере. Для него виртуальные функции не расписаны, т.е. используется вроде шаблона.

 

При глобальной линковке ругается вот такой строкой:

Error[Li005]: no definition for "Virtual function table for A"

 

Почему не создалась эта таблица? Что не так сделал?

 

 

 

 

Нашел проблему. Два виртуальных метода возвращали значения, а все остальные были void. Когда просто вписал там return FALSE, то таблицу компилятор сделал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для него виртуальные функции не расписаны, т.е. используется вроде шаблона.

 

Если экземпляры класса с виртуальными функциями использовать не предполагается, то виртуальные функции имеет смысл сделать pure virtual, тогда не придется делать заглушки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле вы похоже функцию объявили, но не инстанцировали (т.е. собственно тела у функции не было). Потому и таблица не создавалась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...