我正在讨论一些C ++的设计模式,并且我遇到了这个错误。
class Singleton {
public:
static Singleton* instance;
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton;
}
return instance;
}
int x;
private:
Singleton() {};
};
Singleton* Singleton::instance = nullptr;
int main()
{
Singleton foo1* = Singleton::getInstance(); // cannot access private member Singleton
}
我对这些材料也很陌生。我可以帮助找出错误/如何解决这个问题吗?此外,我很清楚铃声设计是“反模式”,这主要是为了练习。
答案 0 :(得分:3)
嘿@mannerofallthings,
问题出现在主函数中,您希望将内部Singleton分配给指向Singleton的指针。但是你有一个拼写错误告诉编译器你想要别的东西。
Singleton foo* = Singleton::getInstance();
应该是
Singleton* foo = Singleton::getInstance();
这里有趣的部分是 Singleton foo * ,你与 Singleton * foo 混淆了。所以在第一部分中,错误之一,编译器尝试在堆栈上创建一个Singleton实例(这是第一个编译错误,然后它会在以后抱怨以下asteriks)并且由于编译器向你大吼大叫的私有构造函数,它无法访问Singleton的构造函数。