2015-06-30 93 views
-2

更改變量的值我在我的C++,其中我tryig用於更新上的GUI的一部分顯示的信息的下面的函數:C++基於時間

void store::updateHeader(){ 
    ... 
    strstart = &newHeaderMsg.headerText[0]; 
    *strstart = 'D'; 
    const char* originalStrStartValue = strstart; 
    double timeWarningStarted = SimulationTime::Instance()->getSimulationTime(); 

    if(warningSelect == 1){ 
     timer->begin(); 
     ... 
     warningTimeout = 15; // time in seconds 
     double timeWarningDisplayed = SimulationTime::Instance()->getSimulationTime(); 

     if(timerStarted){ 
      *strstart = 'R'; 
      if(timeWarningDisplayed >= (timeWarningStarted + warningTimeout)){ 
       *strstart = *originalStrStartValue; 
      } 
     } else { 
      *strstart = originalStrStartValue; 
     } 
    } else { 
    *strstart = originalStrStartValue; 
    } 
} 

基本上,邏輯的功能是:

  1. 創建一個變量,該變量將保存數組第一個元素(數組newHeaderMsg.headerText[])的內存位置。該變量被稱爲strstart
  2. 設置內存位置strstart等於'D'
  3. 獲取當前系統時間,並將其值傳遞給變量timeWarningStarted
  4. 如果在GUI上進行了特定選擇(即warningSelect設置爲1,請啓動計時器,並將warningTimeout變量設置爲15(15秒),然後獲取當前系統時間並將其值設置爲變量timeWarningDisplayed
  5. 如果計時器已啓動,在所述第一元件的陣列中的存儲器位置設置變量(即strstart的存儲器位置),以「R」。
  6. 檢查timeWarningDisplayed變量是否大於或等於總和爲timeWarningStartedwarningTimeout(如果是,那麼警告已經顯示了預定的時間長度)
  7. 如果timeWarningDisplayed大於或等於timeWarningStartedwarningTimeout的總和,則將*strstart的值設置爲值originalStrStartValue,即將其設置回'D'。
  8. 否則,如果warningSelect不是'1',則將*strstart的值設置爲值originalStrStartValue,即將其設置回'D'。

我遇到的問題是試圖設置變量的值originalStrStartValue。如果我用上面的代碼運行程序,那麼儘管我已經聲明originalStrStartValueconst,因爲我改變它指向的變量的值,它的值也會改變。

如果我嘗試將它設置爲strstart內存位置相反,即

const char* originalStrStartValue = *strstart; 

然後我得到的編譯錯誤:

Error: a value of type "char" cannot be used to initialize an entity of type "const char * "

所以我的問題是,我怎麼能建立一個在一個函數中某個特定內存位置的變量的'默認'值,然後在同一個函數中,當某個特定條件爲真時,更改該變量的值,但是在該條件不再存在時自動恢復爲默認值真正?

+0

從編譯器的錯誤信息實際上還不清楚什麼?你寧願寫'const char * originalStrStartValue = strstart;'? –

+0

@ scohe001它確實,你是對的,我的壞 –

回答

3

您收到的錯誤是預期的並且很清楚。您不能將char轉換爲char指針,因爲這兩種類型完全無關。

據我所知,你只想改變字符數組的第一個字符。你爲什麼不宣佈originalStrStartValuechar(或const char),然後在需要時恢復爲該值?

const char originalStrStartValue = *strStart; 
    ... 
    *strStart = originalStrStartValue