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

Виртуальные функции С++

Начинаю использовать С++. Хочу использовать наследования.

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

Вот код из заголовочного файла

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\

 

 

 

В чем моя ошибка? Что делаю не правильно?

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


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

В наследнике тоже надо писать virtual:

class PeriodicSignalEnhanced : public  PeriodicSignal
{
public:
  virtual void Set( enumModes mode );

 

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


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

В наследнике тоже надо писать virtual:

class PeriodicSignalEnhanced : public  PeriodicSignal
{
public:
  virtual void Set( enumModes mode );

 

 

Писал.... Не помогает. Ошибка остается.

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


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

virtual не нужен, если вы не собираетесь переопределять ее в наследниках PeriodicSignalEnhanced. А вы свой .cpp не забыли подключить к проекту?

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


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

В чем моя ошибка? Что делаю не правильно?

 

Ознакомьтесь с более ранней темой этого форума - http://electronix.ru/forum/index.php?showtopic=63543

Там ваша ошибка уже описана, и причины ее указаны.

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


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

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

В файле с расширение *.срр есть реализации методов Set( enumModes mode ) для обоих классов.

 

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


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

Спасибо всем отозвавшимся.

Тему эту читал, но были отличия от моего случая.

Ошибку нашел)))

Небыло реализации деструктора в наследнике))) Как всегда дело было вечером........))

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


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

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

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

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

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

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

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

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

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

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