Ho due classi base con l'utilizzo di clausole
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Dichiaro quindi una classe
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
il compilatore quindi contrassegna un riferimento di errore a "NetworkPacket" è ambiguo "sendNetworkPacket (NetworkPacket & ..."
Ora entrambe le "clausole using" si risolvono nella stessa classe sottostante Networking: NetworkPacket
e infatti se sostituisco la dichiarazione del metodo con:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
si compila bene.
Perché il compilatore tratta ciascuna clausola using come un tipo distinto anche se entrambi indicano lo stesso tipo sottostante. Questo è obbligatorio per lo standard o abbiamo un bug del compilatore?
NetworkPacket
: in MultiCmdQueueCallback, in PlcMsgFactoryImplCallback, in Networking. Quale usare dovrebbe essere specificato. E non credo che mettere virtual
qui sarà di alcun aiuto.