Xin chào mọi người,
Mình có một vấn đề về Singleton kết hợp với template trong C++. Mình viết nó như thế này:
Singleton.h
#pragma once
template<class T>
class Singleton
{
public:
static T* GetInstance();
protected:
Singleton() {}
static T* _instance;
};
Singleton.cpp
#include "Singleton.h"
template<class T>
T* Singleton<T>::_instance = nullptr;
template<class T>
T * Singleton<T>::GetInstance()
{
if (_instance == nullptr)
{
_instance = new T();
}
return _instance;
}
Test.h
#pragma once
#include "Singleton.h"
#include <iostream>
class Test : public Singleton<Test>
{
public:
void Func() { std::cout << "kjklasjdla" << std::endl; }
private:
Test() {}
~Test(){}
};
Test.cpp
#include "Test.h"
Souce.cpp
#include "Test.h"
int main()
{
Test::GetInstance()->Func();
}
Và VS2017 nó chửi mình thế này đây:
error LNK2019: unresolved external symbol "public: static class Test * __cdecl Singleton<class Test>::GetInstance(void)" (?GetInstance@?$Singleton@VTest@@@@SAPAVTest@@XZ) referenced in function _main
fatal error LNK1120: 1 unresolved externals
Mong mọi người giúp đỡ