→ Lipraxde: 用你查到的那篇的方法啊,是有什麼 error?06/09 06:48
→ chengcti: class member 前面加上 static06/09 09:09
→ chengcti: class 還沒建立 傳進去可能會變成存取不存在的記憶體 06/09 09:10
→ chengcti: 所以一定要是class06/09 09:10
→ chengcti: static member06/09 09:10
感謝兩位,仔細檢查後用那篇的方法重新再寫了一次沒有thread相關的error了
也謝謝c大的解釋,對為何要這樣用的原因也有比較了解了
--
但我在把要用thread呼叫的function改成static member之後又會遇到兩個問題
附上稍微複雜一點的code: https://pastebin.com/3pJVVmV4
1. 呼叫的function還有呼叫其他function(第32行),就會出現以下error
error: cannot call member function ‘void ATPG::tdf_pfFsim_all_fault(int,
int, int)’ without object
2. 呼叫的function如果有用到class data member(第29,30行)也會出現error
error: invalid use of member ‘ATPG::_piPattern’ in static member function
3. 如果class data member有在constructor初始化(第7行)也會出現error
error: ‘int ATPG::_faultCount’ is a static data member; it can only be
initialized at its definition
1.的部分把32行呼叫的function也改宣告成static可以解掉error
但這個function也會呼叫其他member function,要全部都宣告成static才不會有error
請問這是正確的解決方式嗎?還是有更好的解法
2.3.的部分我也是把data member改成static
但如果有在constructor初始化遇到的error我就不會解決了QQ
不知道有沒有更合適的解決方式,謝謝!
※ 編輯: skyHuan (220.129.130.157 臺灣), 06/09/2021 12:42:57
==
推 flarehunter: Google "c++ std::thread class method" 第一篇06/09 12:07
→ flarehunter: shorturl.at/frstM06/09 12:10
https://stackoverflow.com/questions/10998780/stdthread-calling-method-of-class
這篇的方法可以解決!也不會有上面static function的後續問題
感覺是比較適合的作法,感謝f大
==
→ Lipraxde: 你是第一次寫 C++?06/09 13:45
→ Lipraxde: 錯誤訊息都有,文章裡也有介紹,花點時間看不好嗎?06/09 13:46
→ sarafciel: 你原本那篇文章是有你要的解的 這邊你要自己學會變通 06/09 13:58
C++確實沒有到非常熟,thread也是第一次使用
有試著自己搜尋跟除錯了,也有先理解並簡化問題才上來發問
可能因為比較趕還沒真的花很多時間仔細研究就上來發問
下次會自己多花時間多注意的,謝謝兩位前輩指教
※ 編輯: skyHuan (223.137.86.106 臺灣), 06/09/2021 16:37:08
→ Lipraxde: 其實你一開始就有找到答案了,比較熟 C++ 後可以再回來 06/09 22:00
→ Lipraxde: 看看最初的盲點,加油吧~ 06/09 22:00