【问题标题】:QList<customClass> : can't use QList because "implicitly-deleted copy"QList<customClass> :不能使用 QList 因为“隐式删除的副本”
【发布时间】: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 或复制赋值运算符。
  • 我从不写没有publicprivateprotected 标签的成员变量,因为我不知道原因是什么。 (对我来说,这看起来像是一个错误。)在class Edge 定义中的第一个大括号之后添加private: 是否有可能解决您的问题?如果您声明成员变量的方式是合法的,请给我一个链接,因为我在任何地方都找不到此类代码的任何解释。
  • 嗯,你不是唯一一个犯这个错误的人。我也经常看到。这经常让我不确定它是否合法:o

标签: qt qlist


【解决方案1】:

您无法在 c++ 中获取没有复制构造函数的任何对象的副本。 使用指针是一种解决方案,但编写复制构造函数既简单又安全。 有关复制构造函数的更多信息watch here.

【讨论】:

    【解决方案2】:

    您不能复制从 QObject 派生的对象。所以要么不从 QObject 派生,要么使用指针。

    【讨论】:

    • 它不是从 QObject 派生的,在这两种情况下我都会得到错误。我仍然没有得到我应该做的事情
    • 你从 QGraphicsItem 派生,它也不能复制,所以我的建议是 - 使用指针。
    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多