2

好的,这里我有这个复杂类的小例子

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;

LivingObject::myNode1a)在创建新对象时如何处理指针,我应该将它们设为对象吗?还是有其他问题?(注意:我使用的是 Ogre3D,这是教程让我设置所有内容的方式......)

2)解决上述问题后,我如何将其放入 shared_ptr 向量并访问该特定元素以获取函数(例如spawnList[15].(or ->)Attack(target);

4

1 回答 1

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有一个示例指针就足够了。祝你好运!

于 2013-01-16T22:12:51.927 回答