首页 > 解决方案 > 为什么这显示为错误,它应该是什么?

问题描述

这是游戏的一部分。游戏读取地图文件,现在地图必须以单例设计模式实现。if() 在编译器中显示为错误。我有以下代码:

//.h
class Map
{
    static Map* m_instance;
public:
    static Map* getInstance();
    Map();
    ~Map();

//.cpp
static Map *getInstance()
{
    if (!m_instance)
        m_instance = new Map();
    return m_instance;
}

标签: c++design-patternssingleton

解决方案


你有Map在 cpp 文件中声明的静态实例吗?

// Map.h
class Map {
  static Map *m_instance;
public:
  static Map *getInstance();
  Map() = default;
  ~Map() = default;
};
// Map.cpp
Map *Map::m_instance = nullptr; // <--- this line?

Map *Map::getInstance() {
    if (m_instance == nullptr) {
        m_instance = new Map();
    }
    return m_instance;
}

另外,考虑使用智能指针。


推荐阅读