看板 C_and_CPP 關於我們 聯絡資訊
問題(Question): 無法使用 header 裡 class 的變數 錯誤結果(Wrong Output): ...does not name a type... 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) header file: #include<vector> #include<glm/glm.hpp> class polygon { public: polygon() {} polygon(std::vector<glm::vec2> vec): vertices(vec) {} std::vector<glm::vec2> vertices; }; _____________________________ main.cpp: polygon cube; ^^^ 這行沒問題 cube.vertices = std::vector<glm::vec2> { glm::vec2(0.0, 0.0) }; ^^^ 在這裡出錯 'cube' does not name a type -- https://imgur.com/ET847SW -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.235.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1610958791.A.65D.html
nh60211as: 你是不是在global scope做這件事啊 01/18 17:30
LPH66: 樓上+1, 原 PO 你是想要初始化一個全域物件還是? 01/18 18:19
沒錯,我想用全域物件
nh60211as: polygon cube = {std::vector<glm::vec2> {glm::vec... 01/18 19:05
可以請教一下為什麼原本的寫法改成加了括號的寫法就可以過編譯嗎?
nh60211as: 這樣吧,不然寫一個static function來初始化這個物件 01/18 19:06
※ 編輯: shiburin (140.112.235.104 臺灣), 01/18/2021 21:17:14
LPH66: 主要差別在於 = 字單獨寫是普通的指定 01/18 23:56
LPH66: 但跟在宣告後面的意思其實是初始化 01/18 23:56
LPH66: 但你要用這個語法初始化一個結構就必須要寫下篇回文提到的 01/18 23:57
LPH66: list initialization 的語法才行 01/18 23:58
LPH66: 那你這個狀況已經有能用的建構式, 那就可以不用寫 = 01/18 23:59
LPH66: 用 direct initialization 就可以初始化了 01/18 23:59