看板 C_and_CPP 關於我們 聯絡資訊
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)
shadow0326:貼一下你建立object和呼叫它的method的程式碼 01/07 11:41
建立 MotorPlant Cam1; 呼叫 Cam1.SetPWM(nV,nH,&hComm); ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 11:42)
shadow0326:那可能有其它部分有問題,用debugger一步步跑看看吧 01/07 11:44
有阿,就是用debugger一步步跑,才發現private變數無法被改變 ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 11:46)
loveme00835:錯誤訊息呢... 01/07 11:52
loveme00835:阿沒看到能跑@@ 01/07 11:53
flydragon198:我寫了一個小程式測試,是可以丟的~~~ 01/07 11:56
flydragon198:http://tinyurl.com/bybfxb2 應該是其他問題 01/07 12:00
flydragon198:如果要我猜的話,我會猜是Handle這裡~~ 01/07 12:01
debug: 一切如預期 release: MotorPlant();未能正常將private變數初始化 private變數也都是一些不正常的數字,無法被改變 不過很奇怪的是,系統都能正常動作, 為了監控,我又設定private變數m_strControlHV,將它cout來監看 發現都是正確的數值 真的很奇怪,過程都是錯的,結果卻是對的 ※ 編輯: deo2000 來自: 140.122.165.222 (01/07 12:53)
simonly0001:this->m_nPWM_V = p_nPWM_V; 01/07 12:59
simonly0001:改成 const int p_nPWM_V 就知道錯在哪了 01/07 13:02
devilphoenix:private無法被改變是編譯期約束。如果調試中沒變,則 01/07 13:20
devilphoenix:你可能調試的是release版本,缺少debug信息 01/07 13:21
devilphoenix:話說這裡應該是“調試資訊”嘛?233 01/07 13:22
linotwo:如果要得知 release 版的變數的值,建議你用印出來的方式 01/07 16:21
linotwo:用 watch 的可能會因為最佳化而得到沒意義的值。 01/07 16:22
linotwo:也有可能同一個專案的 release 版在開發前期可以用 watch 01/07 16:23
linotwo:後期卻不能。 01/07 16:23