using 절을 사용하는 두 가지 기본 클래스가 있습니다.
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 & ...'
이제 두 '사용 절'은 동일한 기본 클래스 인 Networking : NetworkPacket으로 해석됩니다.
실제로 메소드 선언을 다음과 같이 바꾸면
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
잘 컴파일됩니다.
컴파일러가 각각의 using 절이 동일한 기본 유형을 가리켜도 고유 한 유형으로 취급하는 이유는 무엇입니까? 이것이 표준에 의해 지시됩니까, 아니면 컴파일러 버그가 있습니까?
NetworkPacket
MultiCmdQueueCallback, PlcMsgFactoryImplCallback, 네트워킹에 세 가지가 있음을 알고 있습니다. 사용할 것을 지정하십시오. 퍼팅 virtual
이 여기서 도움이 될 것이라고 생각하지 않습니다 .