我有两个使用using子句的基类
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
然后我宣布一个类(class)
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::NetworkPacket
PlcMsgFactoryImplCallback::NetworkPacket
他们俩都指向
Networking::NetworkPacket
的事实是无关紧要的。我们进行名字解析,这导致歧义。