[英]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.