Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Виртуальные функции С++
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
SergSit
Начинаю использовать С++. Хочу использовать наследования.
Есть базовый класс в котором определен метод. Надо ее переопределить в наследуемом классе.
Вот код из заголовочного файла
Код
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
В наследнике тоже надо писать virtual:
Код
class PeriodicSignalEnhanced : public  PeriodicSignal
{
public:
  virtual void Set( enumModes mode );

SergSit
Цитата(AHTOXA @ May 5 2013, 20:54) *
В наследнике тоже надо писать virtual:
Код
class PeriodicSignalEnhanced : public  PeriodicSignal
{
public:
  virtual void Set( enumModes mode );



Писал.... Не помогает. Ошибка остается.
Сергей Борщ
virtual не нужен, если вы не собираетесь переопределять ее в наследниках PeriodicSignalEnhanced. А вы свой .cpp не забыли подключить к проекту?
Xenia
Цитата(SergSit @ May 5 2013, 22:34) *
В чем моя ошибка? Что делаю не правильно?


Ознакомьтесь с более ранней темой этого форума - http://electronix.ru/forum/index.php?showtopic=63543
Там ваша ошибка уже описана, и причины ее указаны.
Сергей Борщ
QUOTE (Xenia @ May 6 2013, 01:46) *
и причины ее указаны.
Ксения, вы ошибаетесь: там не были определены функции базового класса, тут же автор пишет:
QUOTE (SergSit @ May 5 2013, 21:34) *
В файле с расширение *.срр есть реализации методов Set( enumModes mode ) для обоих классов.

Idle
http://codepad.org/piy44597
SergSit
Спасибо всем отозвавшимся.
Тему эту читал, но были отличия от моего случая.
Ошибку нашел)))
Небыло реализации деструктора в наследнике))) Как всегда дело было вечером........))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.