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

 
 
 
Reply to this topicStart new topic
> Виртуальные функции в IAR
juvf
сообщение Feb 24 2013, 18:37
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Сделал абстрактный класс Sensor в котором есть пара чисто виртуальных функций. В отнаследованном класе переопределил эти виртуальные функции. Линкер пишет

Код
Error[Pe604]: array of abstract class "SensorFreq" is not allowed: D:\juvf\work\led\ledIar\Pwm.h 16
            pure virtual function "Sensor::isValid" has no overrider
            pure virtual function "Sensor::getLiters" has no overrider overrider
Не может линкер связать 2-х слов найти определяния перегруженных функций. Почему? Может какую галку в IAR нужно снять/выставить?
Go to the top of the page
 
+Quote Post
shmur
сообщение Feb 24 2013, 18:43
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 28-11-11
Пользователь №: 68 553



Огласите весь код, пожалуйста sm.gif Сдается мне вы унаследовались неправильно..
Go to the top of the page
 
+Quote Post
juvf
сообщение Feb 25 2013, 02:00
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Код
//Sensor.h
class Sensor
{
public:
    Sensor();
    virtual ~Sensor() = 0;
    virtual bool isValid() const = 0;
};


Код
//Sensor.cpp
#include "Sensor.h"
Sensor::Sensor(){}


Код
//SensorFreq.h
#include "Sensor.h"
class SensorFreq : public Sensor
{
public:
SensorFreq();
~SensorFreq();
virtual  bool isValid() const;
};


Код
//SensorFreq.cpp
#include "SensorFreq.h"
SensorFreq::SensorFreq()
: Sensor()
{
}
SensorFreq::~SensorFreq()
{
}

bool SensorFreq::isValid() const
{
    return true;
}


ну и main
Код
//main.cpp
#include "Sensor.h"
#include "SensorFreq.h"
int main()
{
    SensorFreq asd;
    while(1)
    {
     //какойта код
    }
}


ps вывод компилятора из реального кода, там посложнее, но сделал тестовый, как выше - тоже самое, не может создать объект класса SensorFreq, т.к. не перегружена функция isValid().
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 25 2013, 07:10
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Во первых, это ошибка компилятора, а не линкера.
Во вторых, ошибка про массив, а у тебя в коде массива нету...
Вот такое компилируется без ошибок:
Код
class Sensor
{
public:
    Sensor();
    virtual ~Sensor() = 0;
    virtual bool isValid() const = 0;
};
class SensorFreq : public Sensor
{
public:
SensorFreq();
~SensorFreq();
virtual  bool isValid() const;
} sf;


В третьих, зачем тебе виртуальный деструктор? Или ты будешь объекты по указателю на базу убивать?
Go to the top of the page
 
+Quote Post

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

 


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


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