[問題] 同class內無法存取private變數

看板C_and_CPP (C/C++)作者 (800IM)時間13年前 (2013/01/07 11:04), 編輯推噓3(3013)
留言16則, 6人參與, 最新討論串1/1
class MotorPlant { private: int m_nPWM_V,m_nPWM_H; std::string m_strControlHV; public: MotorPlant(){ m_nPWM_V=0,m_nPWM_H=0;}; ~MotorPlant(){}; int GetVerticalPWM(){return m_nPWM_V;}; int GetHorizontalPWM(){return m_nPWM_H;}; std::string Get_strControlHV(){return m_strControlHV;}; void SetPWM(int p_nPWM_V,int p_nPWM_H,HANDLE *p_hComm) { m_nPWM_V=p_nPWM_V; m_nPWM_H=p_nPWM_H; m_strControlHV=int2str(m_nPWM_V) + "V" + int2str(m_nPWM_H) + "H"; (以下code略) public function 不是可以存取 private變數嗎? 請問出了什麼問題呢? 程式都能跑不會當,但是數值就是丟不進去 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.165.222 ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 11:04)

01/07 11:41, , 1F
貼一下你建立object和呼叫它的method的程式碼
01/07 11:41, 1F
建立 MotorPlant Cam1; 呼叫 Cam1.SetPWM(nV,nH,&hComm); ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 11:42)

01/07 11:44, , 2F
那可能有其它部分有問題,用debugger一步步跑看看吧
01/07 11:44, 2F
有阿,就是用debugger一步步跑,才發現private變數無法被改變 ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 11:46)

01/07 11:52, , 3F
錯誤訊息呢...
01/07 11:52, 3F

01/07 11:53, , 4F
阿沒看到能跑@@
01/07 11:53, 4F

01/07 11:56, , 5F
我寫了一個小程式測試,是可以丟的~~~
01/07 11:56, 5F

01/07 12:00, , 6F
http://tinyurl.com/bybfxb2 應該是其他問題
01/07 12:00, 6F

01/07 12:01, , 7F
如果要我猜的話,我會猜是Handle這裡~~
01/07 12:01, 7F
debug: 一切如預期 release: MotorPlant();未能正常將private變數初始化 private變數也都是一些不正常的數字,無法被改變 不過很奇怪的是,系統都能正常動作, 為了監控,我又設定private變數m_strControlHV,將它cout來監看 發現都是正確的數值 真的很奇怪,過程都是錯的,結果卻是對的 ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 12:53)

01/07 12:59, , 8F
this->m_nPWM_V = p_nPWM_V;
01/07 12:59, 8F

01/07 13:02, , 9F
改成 const int p_nPWM_V 就知道錯在哪了
01/07 13:02, 9F

01/07 13:20, , 10F
private無法被改變是編譯期約束。如果調試中沒變,則
01/07 13:20, 10F

01/07 13:21, , 11F
你可能調試的是release版本,缺少debug信息
01/07 13:21, 11F

01/07 13:22, , 12F
話說這裡應該是“調試資訊”嘛?233
01/07 13:22, 12F

01/07 16:21, , 13F
如果要得知 release 版的變數的值,建議你用印出來的方式
01/07 16:21, 13F

01/07 16:22, , 14F
用 watch 的可能會因為最佳化而得到沒意義的值。
01/07 16:22, 14F

01/07 16:23, , 15F
也有可能同一個專案的 release 版在開發前期可以用 watch
01/07 16:23, 15F

01/07 16:23, , 16F
後期卻不能。
01/07 16:23, 16F
文章代碼(AID): #1GwZikbB (C_and_CPP)
文章代碼(AID): #1GwZikbB (C_and_CPP)