2012-02-11 26 views
2

私はメッシュと呼ばれるクラスを持っています。私はそのオブジェクトを追跡したい。したがって、新しい メッシュが作成されたときに、私は信号を得たいと思っていました。そして、私は追加しましたQObject :: QObject(QObject parent = 0)はこのコンテキストではプライベートです

すべてのメソッドをスロットとして作成し、メーターにメッシュを追加しました。しかし、ここから 私の年の痛みが始まった。何があっても、タイトルのエラーは が表示され始めました。私はすべての行にコメントしたと思っていた、つまり、すべての行の前に//が追加されました。コード内には があります。これをどうすれば解決できますか?

実際のコード

#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); 

}; 
+1

エラーが発生したコードを投稿してください。 – Mat

答えて

2

このエラーを生成している線は、この一つである:QObject由来する

mesh operator=(mesh input); 

クラスはコピーコンストラクタを持つことが許されません。 QObjectドキュメントの状態として:

ませんコピーコンストラクタや代入演算子 はQObjectはコピーコンストラクタや代入演算子もありません。これは設計によるものです。実際には宣言されていますが、マクロQ_DISABLE_COPY()を持つプライベートセクションにあります。 QObject(直接的または間接的)から派生したすべてのQtクラスは、このマクロを使用してコピーコンストラクタと代入演算子をプライベートに宣言します。その理由は、QtオブジェクトモデルページのIdentity vs Valueに関する議論にあります。 QObjectへのポインタ(またはQObjectサブクラス)を使用して、QObjectサブクラスを値として使用したくない場合があります。たとえば、コピーコンストラクタがなければ、コンテナクラスの1つに格納される値としてQObjectのサブクラスを使用することはできません。ポインタを格納する必要があります。

作成したmeshオブジェクトを追跡したい場合は、たとえば他のクラスのQList<mesh*>などを使用できます。オブジェクトが作成されると、それをリストなどにプッシュします。

+0

IVEはQ_DISABLE_COPY()も試しました。しかし、それはうまく動作しませんでした.Donnoなぜ。 しかし、私はすべてが失敗した場合、ポインタと一緒に行くことができ、ポインタの点でプロジェクト全体を記録することを開始したと思います。私の直感が正しいように思えます。今は働き始めました。あなたの答えに感謝します。私はそれを私の脳にブックマークします。だから1つの文章で言う。 "QTを使用している場合は==> POINTERSを使用する必要があります" –

+0

私は助けてくれると嬉しいです – Neox

関連する問題