Ошибка компиляции при попытке компилировать синглтон в C ++

0

Я пытаюсь изучить c++. Я написал файл "Singleton.h" следующим образом:

class Singleton
{
private:
    static Singleton* m_this;
    Singleton();
public: 
    static Singleton* getInstance(){
        return m_this;
    }
    virtual ~Singleton();
};

мой файл Singleton.cpp:

#include "StdAfx.h"
#include "Singleton.h"
Singleton::Singleton(){}
Singleton::~Singleton(){}

Я вызываю мой основной метод, чтобы получить метод getInstance следующим образом:

Singleton* s = NULL;
s = Singleton.getInstance();

Но, я получаю ошибку компиляции:

error C2275: 'Singleton' : illegal use of this type as an expression

Вы знаете, почему?

  • 0
    Так как вы вмешиваетесь в синглтон анти-паттерна: Why virtual ~Singleton(); ???
  • 0
    Вы также захотите убедиться, что вы присвоили new Singleton для m_this до того, как getInstance() вернется.
Теги:
compiler-errors

4 ответа

0
Лучший ответ
s = Singleton::getInstance();

Нет . , но :: (оператор разрешения области) для статических методов.

0

Оператор области :: вместо .

Кроме того, вы получите сообщение об ошибке, вам нужно добавить

Singleton* Singleton::m_this;

to Singleton.cpp

Но предпочтительно вместо этого использовать namespace

0

вам следует позвонить, используя Singleton:: like

Singleton* s = NULL;
s = Singleton::getInstance();
0

использовать оператор разрешения области действия

 s = Singleton::getInstance();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню