看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 4.6.3 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 怎麼把 JavaScript 的程式碼 , 改成 C++ ? 餵入的資料(Input):預期的正確結果(Expected Output): 1 錯誤結果(Wrong Output): main.cpp: In function 'int sub2()': main.cpp:21:13: error: 'x' was not declared in this scope cout << x <<endl; ^ 程式碼(Code):(請善用置底文網頁, 記得排版) JavaScript 原始碼 (書本的範例,正確) => http://pastebin.com/pCgAwAym C++ 原始碼 (自己改寫,錯誤) => https://repl.it/BafW/1 補充說明(Supplement): 用 Chrome 測試 JavaScript 原始碼 會當掉 請用 IE 或 Firefox 來測試 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.146.55 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1451222862.A.F11.html
NaiveRed: 你的x=1,他scope的範圍只在sub1(),sub2()裡不知道x 12/27 22:15
NaiveRed: 還有就是你sub2()也沒回傳東西 12/27 22:18
stupid0319: 我來練習看看https://repl.it/BafW/2 12/27 22:35
kikilalagirl: @NaiveRed,我知道沒宣告會這樣,但是JavaScript可以? 12/27 23:29
kikilalagirl: sub2()也沒回傳東西,想改成void sub2(),可是會錯~ 12/27 23:30
kikilalagirl: 所以就改成int sub2(),編譯就通過了! x改成"Hello!" 12/27 23:32
kikilalagirl: https://repl.it/BafW/3 所以是真的有跑到sub2()裡 12/27 23:33
kikilalagirl: 只是不懂JavaScript為什麼可以跑出x=1,C++卻不行呢? 12/27 23:34
kikilalagirl: 把int x設定全域變數,答案就是1了~但不是我要的~ 12/27 23:41
LPH66: JS 的 scope 規則確實會把 sub1 的 x 帶入 sub2 12/27 23:45
LPH66: 因為 C++ 沒有函式內函式這東西 (lambda 是語法糖, scope 12/27 23:46
LPH66: 跟 JS 的 scope 是分開的), 所以並沒有直接轉成 C++ 的方法 12/27 23:47
LPH66: JS 在這裡還會扯到 closure 的概念, 這並不是 C++ 有的東西 12/27 23:49
NaiveRed: 對不起 我不會JS QQ 12/28 10:42
kikilalagirl: 謝謝L大大的說明 12/28 17:00
holydc: closure 跟 lambda http://ideone.com/Jzldmc 12/28 21:36
holydc: 但我用 c++11 寫不出 sub4... 求救 12/28 21:36
suhorng: 用 std::function 牙 12/28 21:42
holydc: 是沒錯啦,但想盡可能乾淨一些 12/28 22:10
suhorng: 有 capture 其他東西的話就無法,除非手動寫 struct 12/28 22:12
suhorng: 不然總是得把型別擦掉 12/28 22:13