好的,我在这里有一个复杂类的小例子
class LivingObject
{
Ogre::SceneNode* myNode;
Gorilla::ScreenRenderable* myScrRend;
Gorilla::Layer* myRendLayer;
Gorilla::Rectangle* myRendRect;
int Health,Energy,Strength,Dexterity,Intelligence;
float Speed,posX,posY,posZ;
//Assortment of functions
};//Note: Specific members and functions are public/private, but is not relevant
这是一些游戏类信息
class myGame
{
Ogre::Viewport* myViewport;//random
LivingObject LiveObjectArray[100]//question 1: holds the array of objects from a parsed file
std::vector<std::tr1::shared_ptr<LivingObject> > spawnList;//question 2
};
1)我应该如何声明LivingObject
我可以在以后复制的地方(我使用的当前方法会出错:conversion from 'LivingObject*' to non-scalar type 'LivingObject' requested
)LivingObject TestObj=new LivingObject;
1a)在制作新对象时,如何处理LivingObject::myNode
之类的指针,我应该将它们作为对象吗?或者是其他什么问题?(注意:我正在使用Ogre3D,这就是教程让我设置所有内容的方式......)
2)当解决上述问题后,我将如何将其放入shared_ptr向量并访问该特定元素的函数(例如spawnList[15].(or ->)Attack(target);
答案 0 :(得分:2)
1)要复制对象,请使用以下代码:
string s;
string t = s;
1a)这些指针代表什么?如果它们代表独占所有权,则必须在复制拥有对象时复制它们指向的对象。检查任何好文本对构造函数和析构函数的介绍。考虑使LivingObject
类不可复制。
2)试试这个:
shared_ptr<T> p(new T);
vector<T> v;
v.push_back(p);
...
shared_ptr<T> q = v[0];
q->member_function();
作为最后的建议,你需要一本好的C ++书。另一个很好的资源是像这样的其他用户的在线社区。如果可能的话,尝试减少代码。 LivingObject
有一个示例指针就足够了。祝你好运!