首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++在自己的类中调用私有构造函数

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

Stack Overflow用户
提问于 2014-02-04 23:11:02
回答 2查看 4.4K关注 0票数 0

我正在使用VCG库,我有一个私有构造函数,因为Trimesh不能被复制到我的头文件MyProcessing.h中

代码语言:javascript
复制
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文件中调用它时遇到了很多麻烦,我试图在那里创建我的网格,这是我尝试过的

代码语言:javascript
复制
vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > *t_mesh;
MyMesh vcgMesh =MyMesh::MyMesh(*t_mesh);

但是编译器正在解释不可访问的元素

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

EDIT1

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2014-02-04 23:14:07

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

代码语言:javascript
复制
MyMesh vcgMesh =MyMesh::MyMesh(*t_mesh);

不在MyMesh或其任何朋友的成员函数中。

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

票数 2
EN

Stack Overflow用户

发布于 2014-02-04 23:15:49

您不能在类外调用它们,因为您已将它们设置为私有。

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

代码语言:javascript
复制
public:
    MyMesh(const TriMesh &mesh);
    MyMesh operator= (const TriMesh &mesh);

并提供适当的实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21556129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档