2014-04-06 54 views
0

我想研究C++。 我寫了一個文件 「Singleton.h」 如下:編譯錯誤,當試圖在C++編譯一個單身人士

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

既然你篡改反模式單身人士:爲什麼'virtual〜Singleton();'??? –

+0

您還需要確保在'getInstance()'返回之前將'new Singleton'分配給'm_this'。 –

回答

0
s = Singleton::getInstance(); 

.,但::(範圍解析運算符)的靜態方法。

0

使用範圍解析操作

s = Singleton::getInstance(); 
0

你應該使用Singleton::

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

範圍操作::,而不是.

此外,您會得到鏈接錯誤打電話,你需要

Singleton* Singleton::m_this; 

添加到辛格爾頓.cpp

但是,最好使用一個namespace改爲