【发布时间】:2020-06-20 09:31:42
【问题描述】:
我正在尝试使用一个 QList,一个自定义类(类 Edge:public 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;
也许我应该在这里使用 *edges 但我得到了同样的错误......
我在自定义类和 QList 上做错了。 我已经看到了这个话题Call to implicitly deleted copy constructor,但我真的不知道我能接受什么。
这是边缘定义,我删除了未使用的东西:
#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();
};
【问题讨论】:
-
请显示
Edge类的定义。它是否继承自QObject?在这种情况下,您无法复制或移动对象,而必须存储指针。 -
嘿@JoelBodenmann 我刚刚发布了edge.h。我试图添加
class Edge:public QGraphicsLineItem, public QObject,但我得到了同样的错误 -
您的
Edge类继承自QGraphicsLineItem,它没有复制 ctor 或复制赋值运算符。 -
我从不写没有
public、private或protected标签的成员变量,因为我不知道原因是什么。 (对我来说,这看起来像是一个错误。)在class Edge定义中的第一个大括号之后添加private:是否有可能解决您的问题?如果您声明成员变量的方式是合法的,请给我一个链接,因为我在任何地方都找不到此类代码的任何解释。 -
嗯,你不是唯一一个犯这个错误的人。我也经常看到。这经常让我不确定它是否合法:o