J'ai deux classes de base avec des clauses using
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Je déclare ensuite une classe
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
le compilateur signale ensuite une référence d'erreur à 'NetworkPacket' est ambigu 'sendNetworkPacket (NetworkPacket & ...'
Désormais, les deux «clauses d'utilisation» se résolvent dans la même classe sous-jacente. Networking: NetworkPacket
et en fait si je remplace la déclaration de méthode par:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
il compile très bien.
Pourquoi le compilateur traite-t-il chaque clause using comme un type distinct, même si elles pointent toutes les deux vers le même type sous-jacent? Est-ce obligatoire par la norme ou avons-nous un bug de compilation?
NetworkPacket
- dans MultiCmdQueueCallback, dans PlcMsgFactoryImplCallback, dans la mise en réseau. Lequel utiliser doit être spécifié. Et je ne pense pas que la mise virtual
en place sera d'une quelconque utilité ici.