Tengo dos clases base con cláusulas de uso
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Entonces declaro una clase
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
el compilador marca una referencia de error a 'NetworkPacket' es ambiguo 'sendNetworkPacket (NetworkPacket & ...'
Ahora ambas 'cláusulas de uso' se resuelven en la misma clase subyacente Redes: NetworkPacket
y de hecho si reemplazo la declaración del método con:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
Se compila bien.
¿Por qué el compilador trata cada cláusula de uso como un tipo distinto a pesar de que ambos apuntan al mismo tipo subyacente? ¿Es obligatorio por el estándar o tenemos un error de compilación?
NetworkPacket
: en MultiCmdQueueCallback, en PlcMsgFactoryImplCallback, en Networking. Cuál debe usarse debe especificarse. Y no creo que poner virtual
sea de ninguna ayuda aquí.