Re: [問題] C++ Pointer
※ 引述《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)
→
03/07 07:01, , 1F
03/07 07:01, 1F
推
03/07 13:16, , 2F
03/07 13:16, 2F
推
03/07 15:11, , 3F
03/07 15:11, 3F
→
03/07 15:11, , 4F
03/07 15:11, 4F
→
03/07 15:12, , 5F
03/07 15:12, 5F
推
03/07 23:41, , 6F
03/07 23:41, 6F
推
03/09 00:08, , 7F
03/09 00:08, 7F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
1
8
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章