我有一个纹理管理器,我以单例身份运行,并希望以同样的方式制作对象。
无论如何..我在纹理管理器中复制了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
:请参见header和implementation。
Boost具有完美的不可复制性,使用它(例如,您的实现仍允许分配)。
关于为什么版本不起作用的原因:在实现文件的第23行上,您引用的是gameObjects
,而没有指定您要表示的实例。您可能是说instance->gameObjects
。
关于c++ - 为什么一个文件中没有错误而另一个文件中没有错误-“非静态成员引用必须相对于特定对象”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11182382/