kêu vang phát ra một cảnh báo khi biên dịch đoạn mã sau:C++ quá tải cảnh báo chức năng ảo bằng tiếng kêu?
struct Base
{
virtual void * get(char* e);
// virtual void * get(char* e, int index);
};
struct Derived: public Base {
virtual void * get(char* e, int index);
};
Cảnh báo là:
warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
(cảnh báo cho biết cần phải được bật tất nhiên).
Tôi không hiểu tại sao. Lưu ý rằng bỏ ghi chú tương tự trong Base sẽ tắt cảnh báo. Sự hiểu biết của tôi là vì hai hàm get() có các chữ ký khác nhau nên không thể ẩn.
Có phải tiếng kêu phải không? Tại sao?
Lưu ý đây là trên MacOS X, đang chạy phiên bản Xcode gần đây.
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
Cập nhật: hành vi tương tự với Xcode 4.6.3.
xuất sắc như thường lệ ... Cảm ơn –
Có thể chỉ ra rằng, giải pháp để "tắt cảnh báo cục bộ" này cũng đang thay đổi ngữ nghĩa của mã: bây giờ bạn có thể gọi thành viên hàm 'get' với một đối số duy nhất trên một đối tượng kiểu tĩnh' Derived'. Nếu không có khai báo sử dụng, điều tương tự sẽ dẫn đến một lỗi biên dịch. –