私はこのシングルトン パターンに従っています。この場合、エラー LNK2001: 未解決の外部シンボルが発生するのはなぜですか? 私の問題は似ていますが、私の問題は static instanceの定義にはありません。私の問題は、静的GetInstance()定義を別のクラスから解決することです。
私のエラーは違うように見えるか、以前の回答が不十分です。「クラス外で s_instance を定義する必要があります」という提案を試しましたが、これは cpp 初心者としては意味がありません。ヘッダーで静的を宣言し、cpp での実装も定義します。
また、シングルトンのスレッド セーフに関する講義も必要ありません。ハンドラー バインディングはシグナル 2 を使用します...
State.h
class State
{
public:
State(void);
~State(void);
static State* instance;
static State* GetInstance();
...
};
状態.cpp
State::AppState mCurrentState;
boost::signals2::signal<void ()> mSignal;
State* instance = NULL;
State* GetInstance()
{
if( instance == NULL)
{
instance = new State();
return instance;
}
else
{
return instance;
}
}
すべてが正常にコンパイルされます。次に、このようにシングルトンにアクセスしようとすると、
State *state = State::GetInstance();
「未解決の外部シンボル」エラーが発生します。
エラー LNK2019: 未解決の外部シンボル "public: static class State * __cdecl State::GetInstance(void)" (?GetInstance@State@@SAPAV1@XZ) 関数で参照されている "public: virtual void __thiscall MesherApp::setup(void)" (?setup@MesherApp@@UAEXXZ)
「クラス外で定義する」と言う人もいるので、次のことも試しました-それはどういう意味ですか?
class State
{
public:
...
}
static State* instance;
static State* GetInstance();
この質問を見ると、 フィールドを持つ静的メソッドこれがどのように適用されるのかわかりません。.h で宣言し、cpp ファイルですべてを定義しています。