У меня есть два базовых класса с использованием предложений
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);
он компилируется нормально.
Почему компилятор рассматривает каждое предложение using как отдельный тип, даже если они оба указывают на один и тот же базовый тип. Это предписано стандартом или у нас есть ошибка компилятора?
NetworkPacket
- в MultiCmdQueueCallback, в PlcMsgFactoryImplCallback, в сети. Какой из них использовать, следует указать. И я не думаю, что virtual
здесь может помочь помощь.