作者loveme00835 (朴髮箍)
看板C_and_CPP
標題Re: [問題] C++ Pointer
時間Mon Mar 7 02:46:05 2011
※ 引述《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