Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;将结构指针强制转换为类型值_C++ - Fatal编程技术网

C++ c++;将结构指针强制转换为类型值

C++ c++;将结构指针强制转换为类型值,c++,C++,这可能是一个愚蠢的问题,但我正在学习,我的代码有问题: 我在这一行遇到了问题: fb->AddEntity(m); // M Needs to be the type Item not Item* 我需要的是该类型的值的对象,而不是指针,因为我需要将其传递给AddEntity函数,如何转换它 #include "Handler.h" FatBoy *fb; void Entity::Interact() { }; void OnNewPacketReceived(BYTE *dat

这可能是一个愚蠢的问题,但我正在学习,我的代码有问题:

我在这一行遇到了问题:

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);
}
#包括“Handler.h”
胖子*fb;
void实体::Interact()
{
};
void OnNewPacketReceived(字节*数据,整数长度)
{
开关(数据[0])
{
案例0x07:
{
短长度=(短)((数据[1]实体。推回(ent);
}

如果您有一个指针并且希望通过值或引用进行传递,请使用
*m

fb->AddEntity(*m);

如果您有一个指针并希望通过值或引用进行传递,请使用
*m

fb->AddEntity(*m);

要从指针获取对象,请使用取消引用操作符
*

你会这么说吗

fb->AddEntity(*m);
事实上,每次使用
m->member
,这与
(*m).member
完全相同

另一方面,
AddEntity
可能不应该按值传递(它会产生不必要的副本)。请考虑

void FatBoy::AddEntity(const Entity& ent)

相反。

要从指针获取对象,请使用取消引用操作符
*

你会这么说吗

fb->AddEntity(*m);
事实上,每次使用
m->member
,这与
(*m).member
完全相同

另一方面,
AddEntity
可能不应该按值传递(它会产生不必要的副本)。请考虑

void FatBoy::AddEntity(const Entity& ent)

相反。

很高兴能帮上忙。如果你看本·沃伊特的答案,你会发现一个进一步的、可选的建议,可以提高代码的效率。很高兴能帮上忙。如果你看本·沃伊特的答案,你会发现一个进一步的、可选的建议,可以提高代码的效率那些
动态播放
的看可怕的和都将返回空指针,除非
实体
继承自
怪物
项目
——但在这种情况下,它们是不必要的(很可能继承是另一种方式)。您不能通过强制转换来更改对象的类。那些
动态\u强制转换
看起来很可怕,并且都会返回空指针,除非
实体
同时从
怪物
项目
继承-但是在这种情况下,它们是不必要的(而且很可能继承是另一种方式).不能通过强制转换来更改对象的类。