SergSit 0 5 мая, 2013 Опубликовано 5 мая, 2013 · Жалоба Начинаю использовать С++. Хочу использовать наследования. Есть базовый класс в котором определен метод. Надо ее переопределить в наследуемом классе. Вот код из заголовочного файла class PeriodicSignal { public: virtual void Set( enumModes mode ); bool GetState( void ); }; class PeriodicSignalEnhanced : public PeriodicSignal { public: void Set( enumModes mode ); //virtual bool GetState( void ); }; В файле с расширение *.срр есть реализации методов Set( enumModes mode ) для обоих классов. Определяю обьект - PeriodicSignal obj; При попытке использовать obj.Set( em05Hz) линковщик от IAR ARM выдает следующую ошибку: Error[Li005]: no definition for "Virtual function table for PeriodicSignal" [referenced from D:\Homenko\Project\PKO-4\pko-4\ В чем моя ошибка? Что делаю не правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 мая, 2013 Опубликовано 5 мая, 2013 · Жалоба В наследнике тоже надо писать virtual: class PeriodicSignalEnhanced : public PeriodicSignal { public: virtual void Set( enumModes mode ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergSit 0 5 мая, 2013 Опубликовано 5 мая, 2013 · Жалоба В наследнике тоже надо писать virtual: class PeriodicSignalEnhanced : public PeriodicSignal { public: virtual void Set( enumModes mode ); Писал.... Не помогает. Ошибка остается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 5 мая, 2013 Опубликовано 5 мая, 2013 · Жалоба virtual не нужен, если вы не собираетесь переопределять ее в наследниках PeriodicSignalEnhanced. А вы свой .cpp не забыли подключить к проекту? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 5 мая, 2013 Опубликовано 5 мая, 2013 · Жалоба В чем моя ошибка? Что делаю не правильно? Ознакомьтесь с более ранней темой этого форума - http://electronix.ru/forum/index.php?showtopic=63543 Там ваша ошибка уже описана, и причины ее указаны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 6 мая, 2013 Опубликовано 6 мая, 2013 · Жалоба и причины ее указаны.Ксения, вы ошибаетесь: там не были определены функции базового класса, тут же автор пишет: В файле с расширение *.срр есть реализации методов Set( enumModes mode ) для обоих классов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 6 мая, 2013 Опубликовано 6 мая, 2013 · Жалоба http://codepad.org/piy44597 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergSit 0 6 мая, 2013 Опубликовано 6 мая, 2013 · Жалоба Спасибо всем отозвавшимся. Тему эту читал, но были отличия от моего случая. Ошибку нашел))) Небыло реализации деструктора в наследнике))) Как всегда дело было вечером........)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться