簡體   English   中英

C ++在自己的類中調用私有構造函數

[英]C++ Calling private constructor in own class

我正在使用VCG庫,因為Trimesh無法復制到我的頭文件MyProcessing.h中,所以我有一個私有構造函數

class MyMesh    : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , 

std::vector<MyEdge>  > {

private:
    MyMesh(const TriMesh &mesh);
    MyMesh operator= (const TriMesh &mesh);

};

我在MeshProcessing.cpp文件中調用它時遇到很多麻煩,我試圖在其中創建我的網格,這是我嘗試過的

vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > *t_mesh;
MyMesh vcgMesh =MyMesh::MyMesh(*t_mesh);

但是編譯器正在對不可行的元素進行替換

任何幫助如何創建它將不勝感激

編輯1

private:
// TriMesh cannot be copied. Use Append (see vcg/complex/append.h)


TriMesh operator =(const TriMesh &  /*m*/){assert(0);return TriMesh();}
    TriMesh(const TriMesh & ){}

};  // end class Mesh

由於給定的構造函數和賦值運算符是私有的,因此只能在MyMesh或其朋友類的成員函數中使用它們。 您收到一個編譯器錯誤,因為

MyMesh vcgMesh =MyMesh::MyMesh(*t_mesh);

不在MyMesh或其任何朋友的成員函數中。

您將需要創建一個公共構造函數或一些工廠類來解決您的問題。

您不能在課堂外稱呼他們,因為您已將其設為私有。

聽起來好像您不想限制訪問,所以只需將它們公開:

public:
    MyMesh(const TriMesh &mesh);
    MyMesh operator= (const TriMesh &mesh);

並提供適當的實施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM