尝试在c ++中编译单例时出现编译错误

时间:2014-04-06 15:02:08

标签: c++ compiler-errors

我正在尝试学习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(){}

我在main方法中调用getInstance方法,如下所示:

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

但是,我收到编译错误:

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

你知道为什么吗?

4 个答案:

答案 0 :(得分:0)

使用范围解析运算符

 s = Singleton::getInstance();

答案 1 :(得分:0)

s = Singleton::getInstance();

静态方法不是.,而是::(范围解析运算符)。

答案 2 :(得分:0)

你应该使用Singleton::来打电话

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

答案 3 :(得分:0)

范围运算符::代替.

此外,您将收到链接错误,您需要添加

Singleton* Singleton::m_this;

到Singleton.cpp

但最好使用namespace代替