2010-05-31 127 views
5

當我添加一個包括後衛爲Visual C++項目我的頭文件,它給了我下面的警告和錯誤:問題與包括後衛

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

,但是當我添加預編譯的頭前,包括後衛,不會發出警告或錯誤。這是什麼原因?

+0

你能發表最少量的代碼來重現這個問題嗎? – 2010-05-31 06:31:55

+2

以下劃線開頭並且後面跟着另一個下劃線或大寫字母的標識符被保留,請勿使用它們。 – GManNickG 2010-05-31 06:35:17

+0

#ifndef _MAPTEST_H #define _MAPTEST_H #include「stdafx.h」 _MAPTEST_H是包含名稱。當我在宏定義之前放置預編譯頭時,工作正常。 – Izza 2010-05-31 06:36:15

回答

17

兩個問題,我能想到的:

  1. this,Visual C++會不會在那裏你包括stdafx.h前行編譯任何東西 - 所以該行必須是文件中的第一個一個。如果你把它放在宏定義之後,它會被跳過,因此你看到的錯誤。

  2. 保留可能會導致名稱衝突的以下劃線和大寫字母(或雙前導下劃線)開頭的標識符。有關更多詳細信息,請參見this answer

+0

謝謝你的幫助:) – Izza 2010-05-31 06:41:35

+0

不客氣。 :) – tzaman 2010-05-31 07:05:57

2

嘗試打開stdafx.cpp並在其中添加您的宏定義! 我希望你的問題解決了

+0

這反映了4年前被接受的答案的本質,這是什麼增值? – EWit 2014-12-05 09:13:23