枚舉聲明,PSLGVertex :: PSLGVertex()構造抱怨的最後一個參數,它的「PSLGVertexType」不是一個類或命名空間」通過枚舉的構造函數的參數在全球範圍內遵循
我是什麼在這裏做錯了嗎?
enum PSLGVertexType {
REFLEX_VERTEX,
CONVEX_VERTEX,
MOVING_STEINER_VERTEX,
MULTI_STEINER_VERTEX,
RESTING_STEINER_VERTEX,
OTHER_VERTEX
};
構造
PSLGVertex::PSLGVertex() : mark(false), oriPosition(0, 0), speed(0, 0),
startTime(0.0),firstin(NULL), firstout(NULL),type(PSLGVertexType::OTHER_VERTEX)
是的我也試過這個,但編譯器抱怨「類'PSLGVertex'沒有任何字段名爲'OTHER_VERTEX'」我真的不明白爲什麼編譯器看起來在類定義中找到實際上它定義的枚舉頭文件中的全局範圍而不是類體中的全局範圍。這不是很奇怪嗎? –
這並不奇怪,因爲類名稱是當前最內層的範圍,所以這是編譯器首先查找的地方,然後逐漸「剝離」封閉範圍。無論如何,你說枚舉是在全局命名空間,所以如果你說':: OTHER_VERTEX'會發生什麼? –
這又是一個錯誤,編譯器通常會在這些事件中導致一些無法理解的錯誤,它更好地信任直覺而不是編譯器輸出。順便說一句,我注意到,這種類型(PSLGVertexType :: OTHER_VERTEX)是「類型」變量,這是PSLGVErtexType類公開部分中聲明,我認爲它是關鍵字或一些typcasting,但實際上它不是。 AFAIU在構造函數中不調用任何函數,但用該表達式初始化類中的某些屬性。所以問題變成如何分配給局部變量一個枚舉?嘗試過的類型= PSLGVertexType :: OTHER_VERTEX –