Saya memiliki dua kelas dasar dengan menggunakan klausa
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Saya kemudian mendeklarasikan sebuah kelas
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
kompiler kemudian menandai rujukan kesalahan ke 'NetworkPacket' adalah ambigu 'sendNetworkPacket (NetworkPacket & ...'
Sekarang keduanya 'menggunakan klausa' untuk kelas jaringan yang sama: NetworkPacket
dan sebenarnya jika saya mengganti deklarasi metode dengan:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
itu mengkompilasi dengan baik.
Mengapa kompiler memperlakukan masing-masing menggunakan klausa sebagai tipe yang berbeda walaupun keduanya menunjuk ke tipe dasar yang sama. Apakah ini diamanatkan oleh standar atau apakah kita memiliki bug penyusun?
NetworkPacket
- di MultiCmdQueueCallback, di PlcMsgFactoryImplCallback, di Networking. Yang mana yang harus digunakan harus ditentukan. Dan saya tidak berpikir menempatkan virtual
akan membantu di sini.