定义Typedef?(UDP数据包)

Defineing a Typedef? (UDP Packet)

本文关键字:数据包 UDP Typedef 定义      更新时间:2023-10-16

我正在使用RakNet创建一个涉及网络的程序。然而,我不知道如何为数据包定义typedef。我试图让它工作的功能是:

void UDP_ClientDisconnected(Packet *pPacket);

显然,数据包需要是这个函数的typedef,但我不知道如何做到这一点?感谢任何提供解决方案的人。

编辑:

void Connections::UpdateRakNetwork()
{
for(Packet = Peer ->Receive(); Packet; Peer ->DeallocatePacket(Packet), Packet = Peer ->Recieve())
{
    PacketID = GetPacketIdentifier(Pacekt);
    switch(PacketID)
    {
        case ID_DISCONNECTION_NOTIFICATION:
            UDP_ClientDisconnected(Packet);
            break;
    }
    Peer ->DeallocatePacket(Packet);
}
}

信息也从Connections.cpp中的数据包排序传递到.h文件,以便允许我从游戏的其他元素访问这些功能。因此允许我从另一个文件调用UDP_ClientDisconnected(..);

到目前为止,文件的这一部分没有错误,但.h声明出现了"数据包不是类型名"错误。正如下面的人所建议的,这可能是因为我命名了其他包,因此我将其重命名为RakPacket,并获得了相同的错误。

似乎是解决方案:

void Connections::UpdateRakNetwork()
{
    RakNet::Packet *RakPacket = NULL;
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    for(RakPacket = Peer->Receive(); NULL != RakPacket; Peer->DeallocatePacket(RakPacket), RakPacket = Peer->Recieve())
//      ^^^^^^^^^                            ^^^^^^^^^                         ^^^^^^^^^   ^^^^^^^^^
    {
        RakNet::PacketID pID = GetPacketIdentifier(RakPacket);
//      ^^^^^^^^^^^^^^^^^^^^                       ^^^^^^^^^
        switch(pID)
        {
            case ID_DISCONNECTION_NOTIFICATION:
                UDP_ClientDisconnected(RakPacket);
//                                     ^^^^^^^^^
                break;
        }
        Peer->DeallocatePacket(RakPacket);
//                             ^^^^^^^^^
    }
}

我给你这个不是在帮你。再次尝试理解RakNet::Packet *RakPacket = NULL;,以及为什么我们不使用类名作为函数的参数,而是使用指向对象的指针

编辑:

针对第一条评论:

在C++中,对象是具有相关语义的存储区域。在C++对象模型的上下文中,对象一词指的是类的实例。类根据成员定义其实例的特征:数据成员(状态)和成员函数(方法或操作),以及这些成员对其他类的可见性。C++是静态类型的。

在本说明中,您可以将单词class替换为struct。两者之间唯一的区别是对其成员的默认访问权限(classprivatestructpublic):C++中的结构和类之间有什么区别?。

您可以通过编写以下内容轻松做到这一点:

typedef Packet * pPacket;

之后,您可以通过以下方式创建指向数据包对象的指针:

pPacket somePacket(NULL);
somePacket = new Packet(...);
//etc...

Typedef很好,但是隐藏指针会使其无法读取。所以,如果你真的想这么做,你最好有一个充分的理由。

编辑:

"Connections::Packet" is not a type name.

请确保包含正确的类和库。这是你唯一的编译器错误吗?