using句を含む2つの基本クラスがあります
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
次にクラスを宣言します
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
その後、コンパイラーは、「NetworkPacket」へのエラー参照にあいまいな「sendNetworkPacket(NetworkPacket&...」というフラグを立てます。
これで、両方の「using句」が同じ基本クラスNetworking:NetworkPacketに解決されます
実際、メソッド宣言を次のように置き換えた場合:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
それはうまくコンパイルします。
コンパイラーがそれぞれのusing節を両方とも同じ基本型を指しているにもかかわらず、異なる型として扱うのはなぜですか?これは標準によって義務付けられていますか、それともコンパイラのバグがありますか?
NetworkPacket
。MultiCmdQueueCallback内、PlcMsgFactoryImplCallback内、ネットワーク内にあります。どちらを使用するかを指定する必要があります。virtual
ここでパッティングが役に立たないと思います。