Đoạn mã sau KHÔNG chặn bất kỳ cảnh báo trình biên dịch C4503 nào, nhưng nó ngăn chặn cảnh báo C4244.Có thể tắt cảnh báo trình biên dịch C4503 không?
#pragma warning(push)
#pragma warning(disable:4503)
#pragma warning(disable:4244)
#include <map>
#include <string>
int main(int argc, char *argv[])
{
class Field;
typedef std::map<std::string, Field * > Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT; // The C4503 error is NOT suppressed
int a;
a = 5.0f; // The C4244 error is suppressed
}
#pragma warning(pop)
Vui lòng giải thích lý do tại sao cảnh báo C4503 không bị chặn. Lưu ý: có thể do một lý do tương tự như được tham chiếu trong How can I work around warning C4505 in third party libraries?.
Xem this và this để biết thêm thông tin có liên quan.
Tôi đang sử dụng Visual Studio 2008 trên máy tính Windows 7.
Nếu không có một số ngữ cảnh bổ sung, nơi bạn đang tắt cảnh báo, sẽ hơi khó để đưa ra giải pháp. Đoán của tôi: Bạn vô hiệu hóa cảnh báo xung quanh mã mà instantiates mẫu quái vật, nhưng bạn cần phải vô hiệu hóa trước khi tiêu đề, nơi các mẫu được định nghĩa được bao gồm. – Xeo
@Xeo Tôi đã kiểm tra kỹ và xác nhận rằng đây không phải là vấn đề. –
Bạn nên suy nghĩ về việc giải quyết các cảnh báo này, vì sau này chúng có thể dẫn đến các sự cố, ví dụ: khi liên kết. – PlasmaHH