c ++根据时间

时间:2015-06-30 15:13:25

标签: c++ pointers const default-value

我的C ++中有以下功能,我可以尝试使用它来更新GUI部分显示的信息:

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”。
  9. 我遇到的问题是尝试设置变量originalStrStartValue的值。如果我使用上面的代码运行程序,那么尽管已经使用originalStrStartValue声明了const,因为我查找了它指向的变量的值,它的值也会改变。

    如果我尝试将其设置为strstart的内存位置,即<。p>

    const char* originalStrStartValue = *strstart;
    

    然后我收到编译错误:

      

    错误:类型为“char”的值不能用于初始化“const char *”类型的实体

    所以我的问题是,如何在函数中的特定内存位置为变量创建'default'值,然后在同一函数中,在特定条件为真时更改该变量的值,但自动在条件不再为真的那一刻恢复到默认值?

1 个答案:

答案 0 :(得分:3)

您得到的错误是明确的。您不能将char转换为char指针,因为这两种类型完全不相关。

据我了解,您只想更改字符数组的第一个字符。为什么不将originalStrStartValue声明为char(或const char),然后在需要时还原为该值?

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