我有一个纹理管理器,我以单例身份运行,并希望以同样的方式制作对象。

无论如何..我在纹理管理器中复制了100%有效的EAXACT代码,但是在对象管理器中,它给了我这个错误“非静态成员引用必须相对于特定对象”

我认为这与std::map有关吗?

这是我100%工作的textureManager标头和cpp文件。
http://ideone.com/6bZQG | http://ideone.com/jjo2M

这是不起作用的ObjectManager的开始...
http://ideone.com/rhSim | http://ideone.com/uLj4X

现在,基本上是指向std::map的指针是我得到错误的地方。(ObjectManager.cpp的第23行)delete中的destroy()调用给了我该错误以及其他任何地方(如果我创建了一个新函数) 。然而,timer变量正在按预期方式工作。

我应该使用某种花哨的方法来指向std::map的指针吗?据我所知,此代码与纹理管理器的代码100%相同?

感谢您的任何建议!

最佳答案

大致重复我在IRC上所说的话:


您不需要指向std::map的指针-它不会为您保存任何副本,并且可能会花费更多的内存和精力进行维护。
如果您不关心各个单例的销毁顺序,请对它们使用unique_ptr:请参见headerimplementation
Boost具有完美的不可复制性,使用它(例如,您的实现仍允许分配)。


关于为什么版本不起作用的原因:在实现文件的第23行上,您引用的是gameObjects,而没有指定您要表示的实例。您可能是说instance->gameObjects

关于c++ - 为什么一个文件中没有错误而另一个文件中没有错误-“非静态成员引用必须相对于特定对象”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11182382/

10-12 12:20
查看更多