Rusoil 0 1 июня, 2009 Опубликовано 1 июня, 2009 · Жалоба Есть базовый класс с виртуальными методами - 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, то таблицу компилятор сделал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
meister 0 1 июня, 2009 Опубликовано 1 июня, 2009 · Жалоба Для него виртуальные функции не расписаны, т.е. используется вроде шаблона. Если экземпляры класса с виртуальными функциями использовать не предполагается, то виртуальные функции имеет смысл сделать pure virtual, тогда не придется делать заглушки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 1 июня, 2009 Опубликовано 1 июня, 2009 · Жалоба На самом деле вы похоже функцию объявили, но не инстанцировали (т.е. собственно тела у функции не было). Потому и таблица не создавалась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rusoil 0 1 июня, 2009 Опубликовано 1 июня, 2009 · Жалоба Ага, так и было. Спасибо за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться