QList <customClass>: нельзя использовать QList из-за "неявно удаленной копии" - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь использовать QList, настраиваемый класс (class Edge: publi c QGraphicsLineItem), но когда я использую .append или что-то еще, я получаю ошибки компиляции

 call to implicitly-deleted copy constructor of 'Edge'
                 current->v = new T(*reinterpret_cast<T*>(src->v));
                                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Graphboard. cpp

  void GraphBoard::createEdge()
    {
       
       Edge newEdge(item1,item2);
       edges.append(newEdge);
    
    }

В моем GraphBoard.h

QList<Edge> edges;

Возможно, мне стоит использовать * ребра здесь, но я получаю ту же ошибку ...

I ' m делает что-то не так с пользовательским классом и QList. Я уже видел этот topi c Вызов неявно удаленного конструктора копирования , но я действительно не знаю, что я могу с этим сделать.

Вот определение края, я удаляю неиспользуемые вещи:

#include <QObject>
#include <QWidget>
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>

class Edge:public QGraphicsLineItem
{

    QGraphicsEllipseItem * state1;
    QGraphicsEllipseItem * state2;

public:
    enum { Type = UserType + 2 };
    int type() const override;
    Edge(QGraphicsEllipseItem * s1, QGraphicsEllipseItem* s2);

     QList<QPointF> centerPoints();

};

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Вы не можете получить копию любого объекта в C ++, класс которого не имеет конструктора копирования. Решением является использование указателей, но написать конструктор копирования легко и безопасно. Дополнительную информацию о конструкторах копирования смотрите здесь.

0 голосов
/ 20 июня 2020

Вы не можете скопировать объект, производный от QObject. Так что либо не производите от QObject, либо используйте указатели.

...