C ++在自己的类中调用私有构造函数

时间:2014-02-04 15:11:02

标签: c++ constructor compiler-errors private

我正在使用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);

但是编译器正在使用无法访问的元素

任何帮助如何创建它将不胜感激

EDIT1

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

2 个答案:

答案 0 :(得分:2)

因为给定的构造函数和赋值运算符是私有的,所以只能在MyMesh或其朋友类的成员函数中使用它们。您收到编译器错误,因为

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

不属于MyMesh或其任何朋友的成员函数。

您需要创建一个公共构造函数或一些工厂类来解决您的问题。

答案 1 :(得分:1)

你不能在课堂外打电话给他们,因为你已经把它们变成了私人。

听起来你不想限制访问,所以只需将它们公开:

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

并提供适当的实施。