-1

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

void UDP_ClientDisconnected(Packet *pPacket);

Packet 显然需要是这个函数的 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 并获得相同的错误。

4

2 回答 2

1

似乎这是解决方案:

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++ 是静态类型的。

在此解释中,您可以将单词替换classstruct。两者之间的唯一区别是对其成员的默认访问权限(privateforclasspublicfor struct):C++ 中的 struct 和 class 有什么区别?.

于 2013-07-16T21:35:51.437 回答
-2

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

typedef Packet * pPacket;

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

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

Typedef 很棒,但隐藏指针使其不可读。所以如果你真的想这样做,你最好有一个很好的理由。

编辑:

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

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

于 2013-07-16T20:40:51.583 回答