error C2061: 語法錯誤: 識別符號“MonsterSprite”

firedragonpzy發表於2012-08-02
[b][i]本文為firedragonpzy原創,轉載務必在明顯處註明:
轉載自【Softeware MyZone】原文連結: http://www.firedragonpzy.com.cn/index.php/archives/690[/i][/b]

  
今天遇到了一個扯淡的錯誤,搞了半天時間,最終同事給解決了,錯誤資訊如下:
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\drawfireline.h(40): error C2061: 語法錯誤: 識別符號“MonsterSprite”
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\drawfireline.h(50): error C2143: 語法錯誤 : 缺少“;”(在“*”的前面)
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\drawfireline.h(50): error C4430: 缺少型別說明符 - 假定為 int。注意: C++ 不支援預設 int
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\drawfireline.h(50): error C4430: 缺少型別說明符 - 假定為 int。注意: C++ 不支援預設 int
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\firescene.h(16): error C2143: 語法錯誤 : 缺少“;”(在“*”的前面)
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\firescene.h(16): error C4430: 缺少型別說明符 - 假定為 int。注意: C++ 不支援預設 int
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\firescene.h(16): error C4430: 缺少型別說明符 - 假定為 int。注意: C++ 不支援預設 int
1>e:\ios\cocos2d-1.0.1-x-0.11.0\purplebufferfly\classes\tigermountainscene.cpp(219): warning C4305: “引數”: 從“double”到“cocos2d::ccTime”截斷

這樣子看來,是沒有定義MonsterSprite,但是我確實定義過啊。下面,給大家詳細解釋一下。
我程式是這樣子的,MonsterSprite是自己封裝的一個精靈類,而在一個自定義的層(DrawLine)中使用這個自定義的精靈,在DrawLine中#include "MonsterSprite.h"進來,然後使用自定義精靈類,最終在自定義的層中使用自定義的精靈,一切看起來是這麼的自然,這麼的合理,可是為什麼偏偏報錯了。
從C2061: 語法錯誤: 識別符號“MonsterSprite”,看起來就是沒有定義MonsterSprite,而是把MonsterSprite看成了識別符號,一般大家自己定義的變數什麼的大家習慣稱之為識別符號,但是我明明定義了,為什麼還說沒有呢。原因是編譯就沒有通過,我這次犯的錯是重複包含,即A包含了B,B又包含了A,我的還稍微複雜點,在某個檔案的標頭檔案中包含了某個標頭檔案,一層嵌一層,導致A包含了B,B又包含了A。希望大家以後注意,不要犯我這樣的低階錯誤。
下面貼出解決方案:
在DrawLine標頭檔案中先宣告一下類:class MonsterSprite;然後在DrawLine.cpp檔案中#include "MonsterSprite.h",反之即可。
恩,不早了,今天就先到這裡了,希望這個對大家有幫助,也不浪費我這麼多時間寫……
呼呼……

相關文章