c ++根据时间更改变量的值

c++ Change the value of a variable based on time

我的 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的值设置为[=28=的值],即将其设置回 'D'。
  8. 否则,如果 warningSelect 不是 '1',则将 *strstart 的值设置为 originalStrStartValue 的值,即设置回 'D' .

我遇到的问题是试图设置变量 originalStrStartValue 的值。如果我 运行 使用上面代码的程序,那么尽管已经用 const 声明了 originalStrStartValue,因为我改变了它指向的变量的值,它的值也会改变.

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

const char* originalStrStartValue = *strstart;

然后我得到编译错误:

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

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

您收到的错误是意料之中的,而且很清楚。您不能将 char 转换为 char 指针,因为这两种类型完全无关。

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

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