来自单身人士课程的无法容纳的私人会员

时间:2016-08-02 08:57:16

标签: c++ singleton

我正在讨论一些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

}

我对这些材料也很陌生。我可以帮助找出错误/如何解决这个问题吗?此外,我很清楚铃声设计是“反模式”,这主要是为了练习。

1 个答案:

答案 0 :(得分:3)

嘿@mannerofallthings,

问题出现在主函数中,您希望将内部Singleton分配给指向Singleton的指针。但是你有一个拼写错误告诉编译器你想要别的东西。

Singleton foo* = Singleton::getInstance();

应该是

Singleton* foo = Singleton::getInstance();

这里有趣的部分是 Singleton foo * ,你与 Singleton * foo 混淆了。所以在第一部分中,错误之一,编译器尝试在堆栈上创建一个Singleton实例(这是第一个编译错误,然后它会在以后抱怨以下asteriks)并且由于编译器向你大吼大叫的私有构造函数,它无法访问Singleton的构造函数。

相关问题