Mam dwie klasy podstawowe z wykorzystaniem klauzul
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Następnie deklaruję klasę
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
kompilator następnie oznacza odniesienie błędu do „NetworkPacket” jest niejednoznaczne „sendNetworkPacket (NetworkPacket i ...”
Teraz obie „klauzule używające” rozwiązują tę samą klasę bazową Networking: NetworkPacket
i w rzeczywistości, jeśli zastąpię deklarację metody:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
dobrze się kompiluje.
Dlaczego kompilator traktuje każdą klauzulę używającą jako odrębny typ, mimo że oba wskazują na ten sam typ bazowy. Czy jest to wymagane przez standard, czy mamy błąd kompilatora?
NetworkPacket
- w MultiCmdQueueCallback, w PlcMsgFactoryImplCallback, w sieci. Który z nich powinien zostać użyty. I nie sądzę, żeby wprowadzenie virtual
mogło tu pomóc.