Ich habe zwei Basisklassen mit using-Klauseln
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Ich erkläre dann eine Klasse
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
Der Compiler kennzeichnet dann einen Fehlerverweis auf 'NetworkPacket', der nicht eindeutig ist. 'sendNetworkPacket (NetworkPacket & ...'
Jetzt werden beide 'using-Klauseln' in dieselbe zugrunde liegende Klasse Networking: NetworkPacket aufgelöst
und in der Tat, wenn ich die Methodendeklaration durch Folgendes ersetze:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
es kompiliert gut.
Warum behandelt der Compiler jede using-Klausel als einen eigenen Typ, obwohl beide auf denselben zugrunde liegenden Typ verweisen? Ist dies vom Standard vorgeschrieben oder haben wir einen Compiler-Fehler?
NetworkPacket
- in MultiCmdQueueCallback, in PlcMsgFactoryImplCallback, in Networking. Welches verwendet werden soll, sollte angegeben werden. Und ich denke nicht, dass Putten virtual
hier hilfreich sein wird.