C++ VS單例模式報 錯誤 LNK2001 無法解析的外部符號 private: static class SingletonPattern錯誤

LyRics1996發表於2020-11-24

一、前言

如圖所示,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;
也就是將我註釋的那一行解開即可!!!

相關文章