C++ 定义Typedef?(UDP数据包)

C++ 定义Typedef?(UDP数据包),c++,typedef,packet,C++,Typedef,Packet,我正在使用RakNet创建一个涉及网络的程序。但是,我不知道如何为数据包定义typedef。我试图让它工作的功能是: void UDP_ClientDisconnected(Packet *pPacket); 显然,对于这个函数,数据包需要是一个typedef,但是我不知道怎么做?感谢所有提供解决方案的人 编辑: void Connections::UpdateRakNetwork() { for(Packet = Peer ->Receive(); Packet; Peer ->

我正在使用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::Packet" is not a type name.
信息也从Connections.cpp中的包排序传递到.h文件,以便允许我从游戏的其他元素访问这些功能。因此允许我调用
UDP\u ClientDisconnected(…)来自另一个文件


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

您可以通过以下方式轻松实现:

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

pPacket somePacket(NULL);
somePacket = new Packet(...);
//etc...
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::Packet" is not a type name.

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

似乎是解决方案:

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以及为什么我们不使用类名作为函数的参数,而使用指向对象的指针…

编辑:

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::Packet" is not a type name.
针对第一条评论:

<>在C++中,对象是一个具有相关语义的存储区域。在C++对象模型的上下文中,术语对象是指类的实例。类根据成员定义其实例的特征:数据成员(状态)和成员函数(方法或操作),以及这些成员对其他类的可见性。C++是静态类型的。p>
在本说明中,您可以将单词
class
替换为
struct
。两者之间唯一的区别是对其成员的默认访问权限(
class
private
struct
public
):。

数据包
显然不需要是
typedef
。也许您可以解释为什么它需要是一个。@MadScienceDreams模板在这里应该如何帮助呢?我相当肯定数据包是一个接口,您必须从它继承。查看定义类数据包的头文件-查看它是否有虚拟方法创建一个实现这些虚拟方法的类-并将其作为
pPacket
传递。因为当我悬停在错误上方时,Visual Studio一直在抱怨我:“Connections::Packet”不是类型名。如果现在是这样,我应该如何定义数据包?@Iwan抱歉,我不明白:(如果函数看起来像
void UDP\u ClientDisconnected(packet*pPacket),你真的认为这会解决问题吗
?我用三轮车换了它to@itwasntpete.不,可能不是。但他问了怎么做,所以我告诉了他怎么做。我认为他的问题与中的typedef关键字无关。这就是我问更多问题的原因。RakNet::Packet是一个对象。。它是一个结构。@user1591117我会说它是一个类型。例如,
RakNet::Packet p
here p是一个类型为
RakNet::Packet
的对象。我编辑我的帖子是为了解释…好吧…我会阅读这部分内容,但是我似乎理解了我后来遇到的一些事情。我实际上有一个工作的游戏引擎,我插入了客户端和所有东西;我启动它是为了看看我能走多远,我被拒绝了ing将在服务器端RakNet被击败。顺便说一句:谢谢。