реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Таблица виртуальных функций
Rusoil
сообщение Jun 1 2009, 13:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



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

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

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


protected:

}



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

CODE

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, то таблицу компилятор сделал.
Go to the top of the page
 
+Quote Post
meister
сообщение Jun 1 2009, 16:20
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Rusoil @ Jun 1 2009, 17:17) *
Для него виртуальные функции не расписаны, т.е. используется вроде шаблона.


Если экземпляры класса с виртуальными функциями использовать не предполагается, то виртуальные функции имеет смысл сделать pure virtual, тогда не придется делать заглушки.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 1 2009, 16:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



На самом деле вы похоже функцию объявили, но не инстанцировали (т.е. собственно тела у функции не было). Потому и таблица не создавалась.
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
Rusoil
сообщение Jun 1 2009, 19:37
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Ага, так и было. Спасибо за ответы.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 02:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016