IvaSerbia Ответов: 4

Привет из Сербии! :) У меня есть ошибка, когда я пытаюсь скомпилировать этот класс..в чем же проблема?


ошибка: недопустимое приведение к абстрактному классу типа 'Control'|
потому что следующие виртуальные функции являются чистыми в рамках "контроля":|

Это мой код.
#ifndef BUTTON_HPP_INCLUDED
#define BUTTON_HPP_INCLUDED

#include "Control.hpp"
class Button:public Control{
private:
    DinString caption;
    int clicks=0;
public:
    Button() {}
 Button(int i,int w,int h,DinString cap,int cl):Control(i,w,h),caption(cap),clicks(cl){}
 Button(const Button& b):Control((Control)b),caption(b.caption),clicks(0){}
void click(){
   clicks++;
}
void log()const{

    cout<<"Button2-Save"<<id<<"w: "<<width<<"H: "<<height<<"clicks: "<<clicks<<endl;

}

DinString getCaption() const {
    return caption;
}

void setCaption(DinString ds) {
    caption = ds;
}

int getClicks() const {
    return clicks;
}

};
#endif // BUTTON_HPP_INCLUDED



Что я уже пробовал:

другой код simmilar работает,но этот нет.Я действительно не понимаю,в чем проблема, потому что думаю, что все хорошо написано

4 Ответов

Рейтинг:
25

Rick York

Нет, они написаны неправильно. Данная линия осуществляет контроль абстрактный класс :

virtual void log() const=0;
и это не может быть инстанцировано. Класс Button должен обеспечивать реализацию метода log, иначе он также не может быть создан, и он должен быть помечен как виртуальный и иметь точно такую же сигнатуру, как и определение базового класса. Другими словами, скопируйте эту строку, удалите часть "=0;", предоставьте реализацию, и она должна избавиться от этого сообщения об ошибке.


Рейтинг:
2

CPallini

То Button класс должен переопределять все чистые виртуальные функции, объявленные в Control класс (Вы нам его не показывали Контроль.ГЭС код). Смотрите, например Чистые виртуальные функции и абстрактные классы в C++.


Рейтинг:
2

IvaSerbia

#ifndef CONTROL_HPP_INCLUDED
#define CONTROL_HPP_INCLUDED
классный контроль{
защищенный:
int id;
int ширина;
int высота;
общественный:
Контроль(){}
Контроль(я инт,инт б,инт сек):ID(я),ширина(W),высота(h){}
Контроль(контроль с const &амп;с):удостоверение личности(Си.ИД),ширина(возр.ширина),высота(c.высота){}
virtual void log()const=0;

int getId() const {
идентификатор возврата;
}

int getWidth() const {
возвращение ширина;
}

int getHeight() const {
возвратная высота;
}

};

#endif // CONTROL_HPP_INCLUDED


Рейтинг:
0

IvaSerbia

Я думаю,что класс Button и Control написаны правильно :(