問題が発生したときに、シングルトンを実装するクラス テンプレートをコーディングしていました。
.h ファイルに静的ポインターがある場合、リンカーの問題 (vs 15 での lnk 2001 および lnk 1120) のためにコンパイルされません。
問題をより理解しやすいようにコードを単純化しました。
#pragma once
#include "SingletonTemplate.h"
int main()
{
SingletonTemplate<int>::test();
}
私のクラスSingletonTemplate.h(ところで.cppはありません)
template<class T>class SingletonTemplate
{
public:
static int myInt;
static void test()
{
SingletonTemplate<T>::myInt = 1;
}
}
いくつかの投稿で、静的変数をさらに宣言することでこの問題を解決できることを読みました。これを関数の外に追加しました(ただし、.hにはまだあります):
template< typename T >
int SingletonTemplate<T>::myInt;
そうすることで問題は解決しましたが、その理由はわかりません。したがって、誰かがこの行の目的を説明できれば、それは素晴らしいことです.
前もって感謝します