Из сообщения об ошибке кажется, что JVCCdPlayer
или JVCVcrPlayer
(или оба) не являются производными от MediaDevice
. Это так?
Вы должны получить оба из MediaDevice
. Убедитесь, что ваши определения выглядят так:
class JVCCdPlayer : public MediaDevice
{
};
class JVCVcrPlayer : public MediaDevice
{
};
Или где-то в иерархии, MediaDevice
должен присутствовать.
Класс MediaDevice
содержит данные члена DeviceName
типа pair<string,string>
, но вы не включили заголовок, в котором определен pair
. Так что включайте <utility>
. Точно так же убедитесь, что вы включили все необходимые заголовки.
Кроме того, я бы не стал писать using namespace std
в заголовочном файле. Поэтому я бы переписал MediaDevice.h
как:
#ifndef MEDIA_DEVICE_H
#define MEDIA_DEVICE_H
#include <string>
#include <utility>
class MediaDevice
{
public:
MediaDevice();
virtual ~MediaDevice();
virtual void Start () = 0 ;
virtual void Stop () = 0 ;
virtual void Forward () = 0 ;
virtual void Rewind () = 0 ;
virtual std::pair<std::string,std::string> getName () const = 0;
private:
std::pair<std::string,std::string> DeviceName;
};
#endif
То есть я бы назвал каждое имя std::
вместо using namespace std
.
Кстати, я не вижу определения следующей чисто виртуальной функции:
virtual pair <string,string> getName () const = 0;
Вы определили это в производных классах? (хотя ошибка не говорит о том, что это проблема, но все равно убедитесь в этом).
Кроме того, данные члена DeviceName
объявлены как private
, который должен быть protected
, поскольку вы обращаетесь к нему из производных классов JVCVcrPlayer
и JVCCdPlayer
.