1

これはばかげた質問かもしれませんが、私は学んでいます。コードに問題があります。

この行に問題があります:

fb->AddEntity(m); // M Needs to be the type Item not Item*

AddEntity 関数に渡す必要があるため、ポインターではなく、その型の値のオブジェクトが必要です。キャストするにはどうすればよいですか?

#include "Handler.h"

FatBoy *fb;

void Entity::Interact()
{
};

void OnNewPacketReceived(BYTE *data, int Length)
{
    switch (data[0])
    {
        case 0x07:
            {
                short length = (short)((data[1] << 8) + data[2]);
                int Index = 0;

                for (int i = 0; i < length; i++)
                {
                    Entity ent;
                    ent.X = (USHORT)((data[Index] << 8) + data[Index + 1]);
                    ent.Y = (USHORT)((data[Index + 2] << 8) + data[Index + 3]);
                    ent.Serial = (UINT)((data[Index + 4] << 24) + (data[Index + 5] << 16) 
                        + (data[Index + 6] << 8) + data[Index + 7]);
                    ent.SpriteID = (USHORT)((data[Index + 8] << 8) + data[Index + 9]);

                    if (ent.SpriteID > 0x8000 && ent.SpriteID < 0x9000)
                    {
                        Item *m = dynamic_cast<Item*>(&ent); 
                        m->UNKNOWN1 = 0x00;
                        m->UNKNWON2 = 0x0000;
                        m->Interact();

                        fb->AddEntity(m); // M Needs to be the type Item not Item*
                    }
                    else
                    {
                        Monster *m = dynamic_cast<Monster*>(&ent); 
                        m->UNKNOWN = 0x00000000;
                    }
                }
            } break;
        default: break; 
    }
}

void FatBoy::AddEntity(Entity ent)
{
    this->Entities.push_back(ent);
}
4

2 に答える 2

5

*mポインターがあり、値または参照で渡したい場合に使用します

fb->AddEntity(*m);
于 2012-12-21T14:40:00.947 に答える
5

ポインターからオブジェクトを取得するには、逆参照演算子を使用します*

だからあなたは言うでしょう

fb->AddEntity(*m);

実際、 を使用するたびにm->member、それは とまったく同じ(*m).memberです。

一方、AddEntityおそらく値渡しはすべきではありません (不要なコピーを作成します)。検討

void FatBoy::AddEntity(const Entity& ent)

代わりは。

于 2012-12-21T14:40:12.680 に答える