У мене є два базові класи з використанням пропозицій
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Потім я оголошую клас
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
компілятор потім позначає помилку на посилання на "NetworkPacket" неоднозначно "sendNetworkPacket (NetworkPacket & ..."
Тепер обидва "використання пропозицій" вирішуються для одного базового класу Networking: NetworkPacket
і насправді, якщо я заміню декларацію методу на:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
вона складається добре.
Чому компілятор розглядає кожне з використанням пункту як окремий тип, хоча вони обидва вказують на один і той же базовий тип. Це передбачено стандартом чи у нас є помилка компілятора?
NetworkPacket
- у MultiCmdQueueCallback, у PlcMsgFactoryImplCallback, у Мережі. Який використовувати, слід вказати. І я не думаю, що розміщення virtual
тут не допоможе.