我有两个类,一个允许创建唯一显式声明的构造函数,无参数一个,私有。我最近添加了另一个类,但由于将无参数构造函数设为私有而导致编译时错误。唯一的区别是第一个有一个公共静态工厂方法,而后者有一个非静态构造函数,它接受一个参数。
谢谢,希望这是有道理的。
好的,我给你一些代码:
这不编译:
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%明显的错误。
答案 0 :(得分:3)
您始终可以将默认构造函数设为私有(或者根本没有默认构造函数)。
你不能做的是使用来自课堂外(或其朋友)的私人默认构造函数。
您没有提供足够的上下文来确定,但我怀疑您的问题是代码中的其他内容正在尝试默认构建GridElem
,因此需要公开。
唯一的区别是第一个有一个公共静态工厂方法,而后者有一个非静态构造函数接受一个参数。
如果MyScene
有一个工厂方法,那么这是一个成员,可以调用私有默认构造函数。没有“异常”,你刚才说这两种类型只能由它们自己的成员函数(和朋友)默认构造,但只有其中一种具有实际成员函数才能实现。
答案 1 :(得分:-1)
使默认构造函数私有通常意味着你想要所有的 通过工厂创作。所以使用所述工厂,或公开