看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Lipstick12 (你好)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) g++ : 問題(Question):: 不好意思,我想請問一下版上各位高手,最近在寫C++的時候碰到一個問題如下: : 有兩個class A 和 B,我在 class A中宣告了 B的pointer B *ptr,然後在 : class A中有用到pthread去跑run這個function,我想讓ptr在run這個function : 中才被new出來 所以我在run裡面寫了ptr = new B(); 可是編譯卻失敗,請問 : 編譯失敗的原因是什麼還有有什麼方法可以解決這個問題嗎? : 補充說明(Supplement): 看文說故事: ┌───────────┐ │   A  │ ├───────────┤ │- ptr:B* │ ├───────────┤ │+ run(void*):void* ○┼ ─ ─ ┐ │ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  │      └───────────┘ │   ┌────┴─────╮          │ .... │ │ptr = new B( ... ); │           │ .... │ └──────────┘ 如果你忘了把 run 宣告為靜態成員函式, 錯誤訊息應該是: 'cannot convert 'void* (A::*)(void*)' to 'void* (*)(void*)' 'in initialization' 非靜態成員函式因為隱藏了一個 this 指標作為參數, 所以在 傳遞給pthread_create()時型態沒辦法match 如果 run 是靜態成員函式而 ptr 不是靜態資料成員, 錯誤訊 息則是: 'In static member function 'static void* A::run(void*)':' 'invalid use of member 'A::ptr' in static member function' 'from this location' 靜態成員函式不需透過物件參考來呼叫, 所以沒有this指標存 在 → 不能取用非靜態資料成員. 假如 run 不是 A的成員函式, 錯誤訊息應該是: 'In function 'void* run(void*)':' ''ptr' was not declared in this scope' 遇到這個問題可能要回去重看一遍教科書... 什麼方法可以解決這個問題? 還需要了解你的問題還有程式架 構才能對症下藥, 冒然亂改問題會變更多. 用這個來貼你的程式碼吧: http://codepad.org/ (只需要部份就好) 沒想到逛板比猜燈謎還累...Orz -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢██ 歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████花英 ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: loveme00835 來自: 140.121.197.115 (03/07 03:21)
ericinttu:你已經會隔空抓藥看病了 (認真誤) 03/07 07:01
annheilong:觀落陰... 03/07 13:16
Lipstick12:全部問題都被抓到了XD 我第一種和第二種方法都有試過 03/07 15:11
Lipstick12:然後我把RUN跟ptr都設成static還是不行的樣子 03/07 15:11
Lipstick12:現在人在外面 晚點回家補貼程式碼..感謝各位高手! 03/07 15:12
VictorTom:l大能不能順便抓一下下期大樂透或威力彩的頭彩號碼XD 03/07 23:41
MeeDoo:這就是傳說中的通靈 03/09 00:08