C++ 定义Typedef?(UDP数据包)
我正在使用RakNet创建一个涉及网络的程序。但是,我不知道如何为数据包定义typedef。我试图让它工作的功能是: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 ->
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被击败。顺便说一句:谢谢。