何时允许将默认构造函数设为私有

时间:2014-07-11 09:41:04

标签: c++ constructor

我有两个类,一个允许创建唯一显式声明的构造函数,无参数一个,私有。我最近添加了另一个类,但由于将无参数构造函数设为私有而导致编译时错误。唯一的区别是第一个有一个公共静态工厂方法,而后者有一个非静态构造函数,它接受一个参数。

谢谢,希望这是有道理的。

好的,我给你一些代码:

这不编译:

class GridElem {
public:
    GridElem(const char _idata);
    ~GridElem();
private:
    GridElem();
}

这会编译:

class GridElem {
public:
    GridElem(const char _idata);
    ~GridElem();
    GridElem();
}

这会编译:

class MyClass {
public:
    ~MyClass();
private:
    MyClass();

不是一个完整的例子,对不起,但我相信这表明异常出现的地方,也许来自cocos2d::Layer

修改

好吧,我发现正在这样做的电话(eclipse无法找到它:()

标题

中的

  

GridElem myGrid [15] [15];

在cpp文件中

  

MyClass :: MyClass():myGrid {0} {}

我最近才从较小的网格中更改它并明确地给出每个元素(因为由于缺少更多信息它仍然只是0),我认为现在必须扩展到无参数c'tor。我完全忘记了,抱歉,但这不是100%明显的错误。

2 个答案:

答案 0 :(得分:3)

您始终可以将默认构造函数设为私有(或者根本没有默认构造函数)。

你不能做的是使用来自课堂外(或其朋友)的私人默认构造函数。

您没有提供足够的上下文来确定,但我怀疑您的问题是代码中的其他内容正在尝试默认构建GridElem,因此需要公开。

  

唯一的区别是第一个有一个公共静态工厂方法,而后者有一个非静态构造函数接受一个参数。

如果MyScene有一个工厂方法,那么这是一个成员,可以调用私有默认构造函数。没有“异常”,你刚才说这两种类型只能由它们自己的成员函数(和朋友)默认构造,但只有其中一种具有实际成员函数才能实现。

答案 1 :(得分:-1)

使默认构造函数私有通常意味着你想要所有的 通过工厂创作。所以使用所述工厂,或公开