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

 
 
 
Reply to this topicStart new topic
> Виртуальные функции С++
SergSit
сообщение May 5 2013, 18:34
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



Начинаю использовать С++. Хочу использовать наследования.
Есть базовый класс в котором определен метод. Надо ее переопределить в наследуемом классе.
Вот код из заголовочного файла
Код
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\




В чем моя ошибка? Что делаю не правильно?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 5 2013, 18:54
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



В наследнике тоже надо писать virtual:
Код
class PeriodicSignalEnhanced : public  PeriodicSignal
{
public:
  virtual void Set( enumModes mode );



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
SergSit
сообщение May 5 2013, 19:04
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



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



Писал.... Не помогает. Ошибка остается.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 5 2013, 22:31
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 5 2013, 22:46
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(SergSit @ May 5 2013, 22:34) *
В чем моя ошибка? Что делаю не правильно?


Ознакомьтесь с более ранней темой этого форума - http://electronix.ru/forum/index.php?showtopic=63543
Там ваша ошибка уже описана, и причины ее указаны.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 6 2013, 09:14
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Xenia @ May 6 2013, 01:46) *
и причины ее указаны.
Ксения, вы ошибаетесь: там не были определены функции базового класса, тут же автор пишет:
QUOTE (SergSit @ May 5 2013, 21:34) *
В файле с расширение *.срр есть реализации методов Set( enumModes mode ) для обоих классов.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Idle
сообщение May 6 2013, 09:55
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



http://codepad.org/piy44597
Go to the top of the page
 
+Quote Post
SergSit
сообщение May 6 2013, 10:55
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



Спасибо всем отозвавшимся.
Тему эту читал, но были отличия от моего случая.
Ошибку нашел)))
Небыло реализации деструктора в наследнике))) Как всегда дело было вечером........))
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:13
Рейтинг@Mail.ru


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