こんにちは私はVS2010とC++でシングルトンパターンを実装しました。コンパイラは私にエラーを投げます!!シングルトンパターンC++エラー
#ifndef __EgEngine__
#define __EgEngine__ 1
#include <esUtil.h>
#include <stdlib.h>
#include <EgGpuManager.h>
class EgEngine
{
public:
EgEngine();
static EgGpuManager GetGpuManager();
~EgEngine();
void EgInit();
private:
EgEngine(const EgEngine &other){};
EgEngine* operator = (const EgEngine &other)const {};
static EgGpuManager GpuManager; // Return this !!
ESContext esContext;
};
#endif
他のクラス
#ifndef __EgGpuManager__
#define __EgGpuManager__ 1
#include <EgBuffer.h>
#include <EgProgram.h>
class EgGpuManager
{
public:
EgBuffer* GetBuffer();
EgProgram* GetNewProgram();
private:
EgGpuManager();
~EgGpuManager();
EgBuffer buffer;
};
#endif
そして私は、私はこのエラーを持ってコンパイルしようとすると:
1>EgEngine.obj : error LNK2001:
unresolved external symbol "private: static class
EgGpuManager EgEngine::GpuManager" ([email protected]@@[email protected]@A)
はしてくださいと感謝私を助けて。
[クラス内の静的メンバー変数]の複製が可能です。(http://www.stackoverflow.com/questions/5601051/static-member-variable-in-a-class) –
[シングルトンを使用しない] //jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you-never-had-ince-1995/)。彼らはクールではありません。マルチスレッド環境では正しく実装するのは難しく、実装が難しい場合もありますが、正しく実装されている場合でも、コードを悪化させるだけです。 – jalf
また、 '__EgEngine__'のような名前は避けるべきです。二重アンダースコアを含む名前、またはアンダースコアと大文字で始まる名前は、実装(コンパイラと標準ライブラリ)で使用するために予約されています(最後に、マクロをすべて大文字にするのが一般的です) EGENGINE'ではなく、EgEngineである。 – jalf