C++ 为什么一个文件中没有错误,另一个文件中没有错误;非静态成员引用必须与特定对象相关;

C++ 为什么一个文件中没有错误,另一个文件中没有错误;非静态成员引用必须与特定对象相关;,c++,static,singleton,C++,Static,Singleton,我有一个纹理管理器,我作为singleton运行,并希望以同样的方式制作objectmanger 无论如何。。我复制了在texturemanager中100%工作的EAXACT代码,但在对象管理器中,它给了我这个错误“非静态成员引用必须与特定对象相关” 我假设它与std::map有关 这是我的100%工作textureManager头文件和cpp文件。 | 以下是ObjectManager的开始部分,它不工作。。。 | 现在,基本上指向std::map的指针就是我得到错误的地方。。(Object

我有一个纹理管理器,我作为singleton运行,并希望以同样的方式制作objectmanger

无论如何。。我复制了在texturemanager中100%工作的EAXACT代码,但在对象管理器中,它给了我这个错误“非静态成员引用必须与特定对象相关”

我假设它与
std::map
有关

这是我的100%工作textureManager头文件和cpp文件。 |

以下是ObjectManager的开始部分,它不工作。。。 |

现在,基本上指向
std::map
的指针就是我得到错误的地方。。(ObjectManager.cpp的第23行)调用
destroy()
会给我这个错误和其他任何地方(如果我创建了一个新函数)。但是计时器变量的工作方式与预期的一样

有没有什么奇特的方法可以让我指向
std::map
?据我所知,这段代码与纹理管理器的代码完全相同


谢谢你的建议!大致重复一下我在IRC上说的话:

  • 您不需要指向
    std::map
    的指针——它不会为您保存任何副本,并且可能需要花费更多的内存和精力来维护
  • 如果您不关心各种单例的销毁顺序,请为它们使用
    unique\u ptr
    :请参阅和
  • Boost有一个非常好的不可复制性,请使用它(例如,您的实现仍然允许赋值)

至于你的版本不起作用的原因:在你的实现文件的第23行,你指的是
游戏对象
,但没有指明你指的是哪个实例。你可能指的是
实例->游戏对象

为什么
删除游戏对象;
而不是
删除实例->游戏对象;