Lỗi cú pháp không chịu được, bạn không thể dynamic_cast
loại không đa hình. static_cast
là diễn viên bạn sẽ sử dụng trong trường hợp này, nếu bạn biết rằng đó là thực tế, một đối tượng của loại mục tiêu.
Lý do tại sao: static_cast
về cơ bản có trình biên dịch thực hiện kiểm tra tại thời gian biên dịch "Có thể nhập vào đầu ra không?" Điều này có thể được sử dụng cho các trường hợp bạn đang đúc lên hoặc xuống một hệ thống phân cấp thừa kế của con trỏ (hoặc tham chiếu). Nhưng kiểm tra chỉ là lúc biên dịch, và trình biên dịch giả định bạn biết bạn đang làm gì.
dynamic_cast
chỉ có thể được sử dụng trong trường hợp con trỏ hoặc dàn diễn viên tham chiếu và ngoài kiểm tra thời gian biên dịch, thời gian chạy bổ sung sẽ kiểm tra xem dàn diễn viên có hợp pháp hay không. Nó yêu cầu lớp trong câu hỏi có ít nhất 1 phương thức ảo, cho phép trình biên dịch (nếu nó hỗ trợ RTTI) thực hiện kiểm tra bổ sung này. Tuy nhiên, nếu loại được đề cập không có bất kỳ phương thức ảo nào, thì nó không thể được sử dụng.
Trường hợp đơn giản nhất, và có thể đáng giá nếu bạn đang truyền con trỏ xung quanh như thế này, là xem xét làm cho trình phá hủy lớp cơ sở ảo. Ngoài việc cho phép bạn sử dụng phép đúc động, nó cũng cho phép các trình phá hủy thích hợp được gọi khi một con trỏ lớp cơ sở bị xóa.
Nguồn
2011-12-12 04:30:55
'a' không phải là con trỏ. Đây có phải là mã trong mã của bạn không? – littleadv
Xin lỗi, một thực tế là một con trỏ. – wbarksdale
Và là thời gian biên dịch lỗi hay thời gian chạy? Nếu thời gian chạy, sau đó IMHO hành vi mong đợi của nó. – littleadv