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;

1a)新しいオブジェクトを作成するときのように、ポインターをどのように処理LivingObject::myNodeしますか?それらをオブジェクトにする必要がありますか?または何か他の問題がありますか?(注:私は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++の本が必要です。もう1つの優れたリソースは、このような他のユーザーのオンラインコミュニティです。ただし、可能であれば、コードを減らしてみてください。LivingObjectポインタの例が1つあれば十分です。幸運を!

于 2013-01-16T22:12:51.927 に答える