[問題] 標頭檔的問題

看板C_and_CPP (C/C++)作者 (希布凜)時間4年前 (2021/01/18 16:33), 4年前編輯推噓2(209)
留言11則, 2人參與, 4年前最新討論串1/2 (看更多)
問題(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

01/18 17:30, 4年前 , 1F

01/18 17:30, 4年前 , 2F
你是不是在global scope做這件事啊
01/18 17:30, 2F

01/18 18:19, 4年前 , 3F
樓上+1, 原 PO 你是想要初始化一個全域物件還是?
01/18 18:19, 3F
沒錯,我想用全域物件

01/18 19:05, 4年前 , 4F
polygon cube = {std::vector<glm::vec2> {glm::vec...
01/18 19:05, 4F
可以請教一下為什麼原本的寫法改成加了括號的寫法就可以過編譯嗎?

01/18 19:06, 4年前 , 5F
這樣吧,不然寫一個static function來初始化這個物件
01/18 19:06, 5F
※ 編輯: shiburin (140.112.235.104 臺灣), 01/18/2021 21:17:14

01/18 23:56, 4年前 , 6F
主要差別在於 = 字單獨寫是普通的指定
01/18 23:56, 6F

01/18 23:56, 4年前 , 7F
但跟在宣告後面的意思其實是初始化
01/18 23:56, 7F

01/18 23:57, 4年前 , 8F
但你要用這個語法初始化一個結構就必須要寫下篇回文提到的
01/18 23:57, 8F

01/18 23:58, 4年前 , 9F
list initialization 的語法才行
01/18 23:58, 9F

01/18 23:59, 4年前 , 10F
那你這個狀況已經有能用的建構式, 那就可以不用寫 =
01/18 23:59, 10F

01/18 23:59, 4年前 , 11F
用 direct initialization 就可以初始化了
01/18 23:59, 11F
文章代碼(AID): #1W1KV7PT (C_and_CPP)
文章代碼(AID): #1W1KV7PT (C_and_CPP)