ฉันมีคลาสพื้นฐานสองคลาสที่ใช้ส่วนคำสั่ง
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 & ... '
ตอนนี้ทั้งสองใช้ 'การใช้คำสั่ง' เพื่อเครือข่ายระดับพื้นฐานเดียวกัน: NetworkPacket
และในความเป็นจริงถ้าฉันแทนที่การประกาศวิธีการด้วย:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
มันรวบรวมดี
ทำไมคอมไพเลอร์จึงปฏิบัติต่อแต่ละประโยคโดยใช้ clause เป็นประเภทที่แตกต่างกันถึงแม้ว่าทั้งคู่จะชี้ไปที่ประเภทพื้นฐานเดียวกัน สิ่งนี้ได้รับคำสั่งจากมาตรฐานหรือเรามีข้อผิดพลาดคอมไพเลอร์?
NetworkPacket
- ใน MultiCmdQueueCallback ใน PlcMsgFactoryImplCallback ในระบบเครือข่าย ควรระบุหนึ่งอันที่จะใช้ และฉันไม่คิดว่าการวางvirtual
จะเป็นประโยชน์ใด ๆ ที่นี่