【问题标题】:c++ Change the value of a variable based on timec++根据时间改变变量的值
【发布时间】:2015-09-17 11:26:50
【问题描述】:

我的 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”。

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

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

const char* originalStrStartValue = *strstart;

然后我得到编译错误:

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

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

【问题讨论】:

  • 编译器错误消息实际上有什么不清楚的地方?你的意思是写const char* originalStrStartValue = strstart;
  • @scohe001 确实如此,你是对的,我的错

标签: c++ pointers constants default-value


【解决方案1】:

您得到的错误是预期的并且很清楚。您不能将 char 转换为 char 指针,因为这两种类型完全不相关。

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

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

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2020-11-13
    • 2011-10-29
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多