本文爲firedragonpzy原創,轉載務必在明顯處註明:
轉載自【Softeware MyZone】原文鏈接: http://www.firedragonpzy.com.cn/index.php/archives/690
今天遇到了一個扯淡的錯誤,搞了半天時間,最終同事給解決了,錯誤信息如下:
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”,反之即可。