Я сталкиваюсь с этой проблемой, когда постоянно получаю сообщение об ошибке
check_and_cast (): Невозможно привести (inet :: Packet *) к типу 'inet :: Physicallayer :: Signal * '- в модуле (inet :: Physicallayer :: Ieee80211Radio)
Я отправляю пакет, используя следующий код:
std::ostringstream str;
Packet *payload = new Packet(str.str().c_str());
payload->setTimestamp();
L3Address destAddr = chooseDestAddr();
emit(sentPkSignal, payload);
socket.sendTo(payload, destAddr, destPort);
numSent++;
Радиомодуль, который получает пакет запускает следующий код:
Signal *Radio::createSignal(Packet *packet) const
{
encapsulate(packet);
if (sendRawBytes) {
auto rawPacket = new Packet(packet->getName(), packet->peekAllAsBytes());
rawPacket->copyTags(*packet);
delete packet;
packet = rawPacket;
}
Signal *signal = check_and_cast<Signal *>(medium->transmitPacket(this, packet));
ASSERT(signal->getDuration() != 0);
return signal;
}
Я очень сильно запутался, так как функция принимает пакет inet, и я отправляю пакет inet, как говорится в сообщении об ошибке. Я даю функции именно то, что она хочет. Возможно ли, что функция неправильная и вы не можете привести inet пакет к inet :: Physicallayer :: signal? Но функция взята из inet фреймворка, который я не считаю неправильным.
РЕДАКТИРОВАТЬ Я думаю, что на самом деле это не идет на радио. cc? Об ошибке говорит Ieee80211Radio. Я проверил исходный код, но я не могу найти там ничего, что делает кастинг. Фактически, когда я выполняю поиск по всему рабочему пространству, появляется только check_and_cast<Signal *>
в Радио. cc
Однако я также не могу узнать, где вызывается Радио. cc.