一、前言
如图所示,C++使用VS写完单例模式后,报如下错误:
错误 LNK2001 无法解析的外部符号 “private: static class SingletonPattern * SingletonPattern::m_Instance” (?m_Instance@SingletonPattern@@0PAV1@A) Test
错误 LNK1120 1 个无法解析的外部命令
二、代码
2.1 SingletonPattern.h
#pragma once
#include <iostream>
using namespace std;
class SingletonPattern
{
private:
SingletonPattern();
public:
~SingletonPattern();
private:
static SingletonPattern* m_Instance;
public:
static SingletonPattern* GetInstance();
void display();
};
2.2 SingletonPattern.cpp
#include "SingletonPattern.h"
//SingletonPattern* SingletonPattern:: m_Instance = nullptr;
SingletonPattern::SingletonPattern()
{
cout << "创建单例模式对象!" << endl;
}
SingletonPattern::~SingletonPattern()
{
if (m_Instance != nullptr) {
delete m_Instance;
m_Instance = nullptr;
}
cout << "销毁单例模式对象!" << endl;
}
SingletonPattern *SingletonPattern::GetInstance()
{
if (m_Instance == nullptr) {
m_Instance = new SingletonPattern();
}
cout << "返回单例模式句柄!" << endl;
return m_Instance;
}
void SingletonPattern::display()
{
cout << "使用单例模式!" << endl;
}
三、测试
3.1测试代码
#include "SingletonPattern.h"
int main() {
SingletonPattern* m_Test = SingletonPattern::GetInstance();
m_Test->display();
cin.ignore();
return 0;
}
3.2测试结果
四、解决方案
在 SingletonPattern.cpp 文件中,
加入SingletonPattern* SingletonPattern:: m_Instance = nullptr;
也就是将我注释的那一行解开即可!!!