Qt QObject::QObject(QObject父项=0)在此上下文中是私有的

Qt QObject::QObject(QObject父项=0)在此上下文中是私有的,qt,private,qobject,Qt,Private,Qobject,我有一门课叫mesh。我想跟踪它的物体。所以当一个新的 网格被创建,我想要一个信号。我又加了一句 class mesh: public QObject 将所有方法都做成槽,并向创建的c-tor网格添加信号。但是从 在这里,我多年的痛苦已经开始。不管怎样,标题中的错误开始了 出现。甚至认为我对所有行都做了注释,即在每行之前添加了/ 在代码中,它仍然表示相同。我怎样才能解决这个问题 实际代码 #ifndef mesh_H #define mesh_H #include <QObject&g

我有一门课叫mesh。我想跟踪它的物体。所以当一个新的 网格被创建,我想要一个信号。我又加了一句

class mesh: public QObject
将所有方法都做成槽,并向创建的c-tor网格添加信号。但是从 在这里,我多年的痛苦已经开始。不管怎样,标题中的错误开始了 出现。甚至认为我对所有行都做了注释,即在每行之前添加了
/
在代码中,它仍然表示相同。我怎样才能解决这个问题

实际代码

#ifndef mesh_H
#define mesh_H

#include <QObject>
#include "mvert.h"
#include "medge.h"
#include "mface.h"

#include <QList>
#include <QString>
#include <QDebug>
#include "glmaterial.h"

class mesh : public QObject
{
    Q_OBJECT
public:
    explicit mesh(QObject *parent = 0);
    QString getName();

private:
    QString Name;
    GLMaterial material;

    QList<MVert> VertList;
    QList<MEdge> EdgeList;
    QList<MFace> FaceList;

    MVert Centroid;

    QList<int> QFaces;
    QList<int> TFaces;

public slots:
    void setName(QString Name);
    void ReadmeshData(QString meshsrc);
    void displayVerts();
    void displayEdges();
    void displayFaces();
    void addVert(MVert vert);
    void addEdge(MEdge edge);
    void addFace(MFace face);
    void removeDoubles();
    MVert generateCentroid();
    //FIXUS
    void sortQandT();
    void reorderFaces();
    void subDivFace(int index, int res);
    void forcedTriangulate();
    //FIXUS
    bool isVertInEdge(MVert input, MEdge edg);
    bool similarVerts(int i,int j);

    QList<int> relatedFacesToVert(MVert input);
    QList<int> relatedEdgesToVert(MVert input);
    QList<int> relatedVertsToVert(MVert input);
    QList<int> relatedFacesToEdge(MEdge input);
    QList<int> relatedEdgesToEdge(MEdge input);
    QList<int> relatedEdgesToFace(MFace input);
    QList<int> relatedFacesToFace(MFace input);

    QList<MVert> reducedVList();

    QList<MVert> vlistInstance();

    MVert midPointOfEdge(int i);
    MVert centroidOfFace(int i);

    mesh operator=(mesh input);

    void GLdraw();

signals:
    void meshCreated(mesh *mesh);

};
\ifndef网格
#定义网格
#包括
#包括“mvert.h”
#包括“medge.h”
#包括“mface.h”
#包括
#包括
#包括
#包括“glmaterial.h”
类网格:公共QObject
{
Q_对象
公众:
显式网格(QObject*parent=0);
QString getName();
私人:
QString名称;
gl材料;
QList列表;
QList边缘列表;
QList人脸列表;
MVert质心;
QList QFaces;
QList-TFaces;
公众时段:
无效集合名(QString名称);
void ReadmeshData(QString-meshsrc);
void displayVerts();
void displayEdges();
void displayFaces();
void addVert(MVert vert);
无效补遗(MEdge edge);
无效添加面(MFace面);
可移除的空();
MVert生成中心();
//菲克斯
void sortjandt();
void reordfaces();
void子空间(int索引,int res);
void forcedTriangulate();
//菲克斯
bool isVertInEdge(MVert输入,MEdge edg);
bool-similarVerts(inti,intj);
QList relatedFacesToVert(MVert输入);
QList相关EDGESTOVERT(MVert输入);
QList relatedVertsToVert(MVert输入);
QList relatedFacesToEdge(MEdge输入);
QList relatedEdgesToEdge(MEdge输入);
QList relatedEdgesToFace(MFace输入);
QList relatedFacesToFace(MFace输入);
QList reducedVList();
QList vlistInstance();
MVert边缘中点(int i);
MVert质心面(int i);
网格运算符=(网格输入);
void GLdraw();
信号:
创建的空心网格(网格*网格);
};

生成此错误的行是:

mesh operator=(mesh input);
QObject
派生的类不允许有复制构造函数。正如
QObject
文档所述:

没有复制构造函数或赋值运算符 QObject既没有复制构造函数也没有赋值运算符。这是故意的。实际上,它们是声明的,但是在一个带有宏Q_DISABLE_COPY()的私有部分中。事实上,所有从QObject派生的Qt类(直接或间接)都使用此宏将其复制构造函数和赋值运算符声明为私有。推理可以在Qt对象模型页面上关于身份与价值的讨论中找到。 主要结果是,您应该使用指向QObject(或QObject子类)的指针,否则您可能会尝试将QObject子类用作值。例如,如果没有复制构造函数,就不能使用QObject的子类作为要存储在其中一个容器类中的值。必须存储指针


如果要跟踪创建的
mesh
对象,可以使用其他类中的
QList
作为示例。创建对象后,将其推送到列表等。

请在出现错误的地方发布代码。我也尝试过Q\u DISABLE\u COPY()。但效果不好,唐诺,为什么。但是我猜,如果一切都失败了,我们就用指针开始重新编码整个项目。似乎我的直觉是正确的。现在它开始工作了。非常感谢你的回答。我会把它记在脑子里。所以用一句话来说。“如果您使用的是QT==>您应该使用指针”