С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
catahustle
0 / 0 / 1
Регистрация: 26.11.2017
Сообщений: 17
1

Ошибка при создании объекта класса

04.12.2017, 18:20. Просмотров 759. Ответов 2
Метки нет (Все метки)

Есть класс, создаю объект, выходит ошибка "cannot allocate an object of abstract type 'Cat'" Что делать?

cat.h:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef CAT_H
#define CAT_H
#include <QObject>
#include <QGraphicsItem>
#include <QLabel>
 
class Cat : public QObject, public QGraphicsItem, public QLabel
{
    Q_OBJECT
public:
    explicit Cat(QObject *parent = 0);
    ~Cat();
};
 
#endif // CAT_H
cat.cpp:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "cat.h"
#include <QObject>
#include <QLabel>
#include <QGraphicsItem>
 
Cat::Cat(QObject *parent) :
    QObject(parent),QGraphicsItem(),QLabel()
{
    this->setVisible(false);
    this->setPixmap(QPixmap("charR.png"));
}
 
Cat::~Cat()
{
 
}
widget.cpp:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "widget.h"
#include "ui_widget.h"
#include <QGraphicsScene>
#include <QLabel>
#include "cat.h"
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    scene = new QGraphicsScene();
    ui->graphicsView->setScene(scene);
    ui->graphicsView->setGeometry(0,0,1280,720);
    cat = new Cat(parent);
}
 
Widget::~Widget()
{
    delete ui;
}
widget.h:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QGraphicsScene>
#include <QPixmap>
#include "cat.h"
 
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
 
private:
    QGraphicsScene *scene;
    Cat *cat;
    Ui::Widget *ui;
};
 
#endif // WIDGET_H
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2017, 18:20
Ответы с готовыми решениями:

Ошибка при создании класса
Есть графический класс ellips производный от TFigure . его при создании экземпляра надо нарисовать...

Ошибка при создании базового класса для обнаружения коллизий
Пытаюсь создать базовый класс от которого буду наследовать другие классы которые мне надо будет...

При динамическом создании объекта в классе деструктор не вызывается
Добрый день еще раз. Помогите заполнить пробелы в ООП) Есть три класса: // Вспомогательный класс...

Передавать при создании класса, переменную - аргумент функции
1. Вопрос Конструктор класса - метод: CustomGLWidget::CustomGLWidget(QWidget...

Что значит конструкция при создании наследуемого класса от QMainWindow
Здравствуйте, подскажите пожалуйста, создал класс mainwindow, наследуемый от QMainWindow и в...

2
Горбаг
156 / 153 / 51
Регистрация: 25.09.2014
Сообщений: 777
Завершенные тесты: 2
04.12.2017, 18:25 2
Лучший ответ Сообщение было отмечено catahustle как решение

Решение

Проблема в наследовании. QGraphicsItem - абстрактный класс. Вы не можете создать объекты этого типа. Если вы наследуетесь от абсрактного класса, вам необходимо предоставить реализацию всех чисто виртуальных методов, описанных в документации, в разделе, описывающем правильное наследование от этого класса. Иногда помимо чисто виртуальных методов (pure virtual) вам приходится переопределять и обычные виртуальные методы, в базовой реализации которых обычно делается... ничего.

Ну и в добавок ко всему - QLabel уже является наследником QObject. Поэтому вашему классу при наследовании от QLabel
нет необходимости наследоваться от QObject.

Ну и еще по ходу дела - советую мельком почитать описание класса QGraphicsObject - может пригодится.

Например:
Ручка. При этом слове вы представляете себе абстрактную ручку. Любого цвета. Формы. Типа чернил. Потому что объекты класса Ручка не могут быть просто так созданы и представлены. А вот Ручка_Паркер_Т1000 - это уже вполне себе реальный класс, со своими вполне реальными функциями и определенными свойствами.
1
catahustle
0 / 0 / 1
Регистрация: 26.11.2017
Сообщений: 17
05.12.2017, 16:35  [ТС] 3
Спасибо, но я решил отказаться от QGraphicsItem и создания QGraphicsView для отображения всего. Я сделал так:
C++ (Qt)
1
cat = new Cat(this);
в конструкторе widget
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2017, 16:35

Ошибка при обращении из одного класса к методу другого класса
Структура проекта, 2 класса: класс графики MainWindow класс логики Сannibals при обращении из...

Глюк при создание объекта очередного класса? Unresolved external
Помню я раньше помог кому - то эту проблему решить удалением obj файлов и пересборкой...но лично...

Ошибка при создании массива c QLabel
Здравстуйте,хочу огласить 16-лейбелов в класе главного окна,и определить их в конструкторе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru