【问题标题】:C++ Calling private constructor in own classC++ 在自己的类中调用私有构造函数
【发布时间】:2014-02-04 15:11:01
【问题描述】:

我正在使用 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 构造函数是做什么的?中间的代码块的上下文是什么?最后,为什么你的网格继承自 std::vector?
  • 没有私人构造器的代码是从 VCG 库的文档页面诚实复制的。我认为 MyMesh 所做的事情以某种方式继承自 trimesh 定义我的三角网格将具有定义其边缘顶点和面(多边形)的向量更多它写在这里vcg.isti.cnr.it/~cignoni/newvcglib/html/basic_concepts.html

标签: c++ constructor compiler-errors private


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    您无法在课堂外调用它们,因为您已将它们设为私有。

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

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

    并提供适当的实现。

    【讨论】:

    • 我被告知这个库使用一些“标准 c++ 技巧”来限制使用公共构造函数。并且必须使用私人承包商。我从定义 trimesh 的头文件中复制/粘贴来编辑问题
    • @ziker 但它只是 TriMesh 构造函数受到限制,您不必将自己的类的构造函数设为私有。
    • 问题是当我公开 MyMesh 构造器并执行此操作时vcg::tri::TriMesh&lt; std::vector&lt;MyVertex&gt;, std::vector&lt;MyFace&gt; , std::vector&lt;MyEdge&gt; &gt; *t_mesh; MyMesh vcgMesh =MyMesh::MyMesh(*t_mesh); 编译器符合Error 10 error C2248: 'vcg::tri::TriMesh&lt;Container0,Container1,Container2&gt;::TriMesh' : cannot access private member declared in class 'vcg::tri::TriMesh&lt;Container0,Container1,Container2&gt;' e:\skola\fiit\ic source\meshes\meshes\meshprocessing.h 31 1 Meshes
    猜你喜欢
    • 2013-01-11
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2021-09-19
    • 2016-08-01
    相关资源
    最近更新 更多