Я использую 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
, Единственное различие между ними заключается в праве доступа по умолчанию для их участников (private
за class
а также public
за struct
): Каковы различия между структурой и классом в C ++?.
Вы можете легко это написать:
typedef Packet * pPacket;
После этого вы можете создать указатель на объект Packet через:
pPacket somePacket(NULL);
somePacket = new Packet(...);
//etc...
Typedef хороши, но скрытые указатели делают его нечитаемым. Так что, если вы действительно хотите это сделать, вам лучше иметь веские причины для этого.
РЕДАКТИРОВАТЬ:
"Connections::Packet" is not a type name.
Убедитесь, что вы включили правильные классы и библиотеки. Это ваша единственная ошибка компилятора?