2010-05-31 40 views
5

Khi tôi thêm một bảo vệ bao gồm tập tin tiêu đề của tôi cho một dự án Visual C++, nó mang lại cho tôi những cảnh báo và báo lỗi sau:Vấn đề với bao gồm bảo vệ

warning C4603: '_MAPTEST_H' : macro is not defined or definition is different after precompiled header use

Add macro to precompiled header instead of defining here

.\MapTest.cpp(6) : use of precompiled header** // the precompiled header stdafx.h is included in this line

.\MapTest.cpp(186) : fatal error C1020: unexpected #endif

nhưng khi tôi thêm tiêu đề biên dịch sẵn trước khi bao gồm bảo vệ , không có cảnh báo hoặc lỗi nào được phát ra. Lý do cho điều này là gì?

+0

Bạn có thể đăng số tiền tối thiểu để tái tạo vấn đề này không? –

+2

Số nhận dạng bắt đầu bằng dấu gạch dưới và được theo sau bởi một dấu gạch dưới hoặc chữ cái khác được đặt trước, không sử dụng chúng. – GManNickG

+0

#ifndef _MAPTEST_H #define _MAPTEST_H #include "stdafx.h" _MAPTEST_H là tên bảo vệ bao gồm. Khi tôi đặt tiêu đề biên dịch trước trước khi định nghĩa macro, hoạt động tốt. – Izza

Trả lời

17

Hai vấn đề tôi có thể nghĩ:

  1. Theo this, Visual C++ sẽ không biên dịch bất cứ điều gì trước khi dòng nơi bạn bao gồm stdafx.h - vì vậy dòng mà cần phải là người đầu tiên trong file . Nếu bạn đặt nó sau định nghĩa macro, nó sẽ bị bỏ qua, do đó các lỗi bạn đang thấy.

  2. Mã định danh bắt đầu bằng dấu gạch dưới và chữ cái viết hoa đầu tiên (hoặc dấu gạch dưới hàng đầu) được đặt trước, điều này có thể gây xung đột tên. xem this answer để biết thêm chi tiết.

+0

Cảm ơn bạn đã trợ giúp :) – Izza

+0

Bạn được chào đón. :) – tzaman

2

Thử mở stdafx.cpp và thêm định nghĩa macro của bạn ở đó! Tôi hy vọng vấn đề của bạn được giải quyết

+0

Điều này phản ánh bản chất của câu trả lời được chấp nhận của 4 năm trước, giá trị gia tăng là gì? – EWit

Các vấn đề liên quan