Tôi có hai lớp cơ sở với việc sử dụng mệnh đề
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
Sau đó tôi khai báo một lớp
class PlcNetwork :
public RouterCallback,
public PlcMsgFactoryImplCallback,
public MultiCmdQueueCallback {
private:
void sendNetworkPacket(const NetworkPacket &pdu);
}
trình biên dịch sau đó gắn cờ một tham chiếu lỗi đến 'NetworkPacket' không rõ ràng 'sendNetworkPacket (NetworkPacket & ...'
Bây giờ cả hai 'sử dụng mệnh đề' đều giải quyết cùng một lớp Mạng bên dưới: NetworkPacket
và trong thực tế nếu tôi thay thế khai báo phương thức bằng:
void sendNetworkPacket(const Networking::NetworkPacket &pdu);
nó biên dịch tốt.
Tại sao trình biên dịch xử lý mỗi mệnh đề sử dụng như một kiểu riêng biệt mặc dù cả hai đều trỏ đến cùng một kiểu bên dưới. Điều này được ủy quyền bởi tiêu chuẩn hay chúng ta có lỗi trình biên dịch?
NetworkPacket
- trong MultiCmdQueueCallback, trong PlcMsgFactoryImplCallback, trong Mạng. Cái nào nên sử dụng nên được chỉ định. Và tôi không nghĩ rằng việc đặt virtual
sẽ giúp được gì ở đây.