我的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;
}
}
基本上,该功能的逻辑是:
newHeaderMsg.headerText[]
)的内存位置。该变量称为strstart
。strstart
的内存位置设为“D”timeWarningStarted
。warningSelect
设置为1
,则启动计时器,并将warningTimeout
变量设置为15(15秒)。然后获取当前系统时间,并将其值设置为变量timeWarningDisplayed
。strstart
的内存位置)设置为“R”。timeWarningDisplayed
变量是否大于或等于timeWarningStarted
和warningTimeout
的总和(如果是,则表示警告已显示预期的时间长度) timeWarningDisplayed
大于或等于timeWarningStarted
和warningTimeout
的总和,则将*strstart
的值设置为originalStrStartValue
的值,即将其设置回'D'。warningSelect
不是“1”,则将*strstart
的值设置为originalStrStartValue
的值,即将其设置为“D”。我遇到的问题是尝试设置变量originalStrStartValue
的值。如果我使用上面的代码运行程序,那么尽管已经使用originalStrStartValue
声明了const
,因为我查找了它指向的变量的值,它的值也会改变。
如果我尝试将其设置为strstart
的内存位置,即<。p>
const char* originalStrStartValue = *strstart;
然后我收到编译错误:
错误:类型为“char”的值不能用于初始化“const char *”类型的实体
所以我的问题是,如何在函数中的特定内存位置为变量创建'default'值,然后在同一函数中,在特定条件为真时更改该变量的值,但自动在条件不再为真的那一刻恢复到默认值?
答案 0 :(得分:3)
您得到的错误是明确的。您不能将char转换为char指针,因为这两种类型完全不相关。
据我了解,您只想更改字符数组的第一个字符。为什么不将originalStrStartValue
声明为char
(或const char
),然后在需要时还原为该值?
const char originalStrStartValue = *strStart;
...
*strStart = originalStrStartValue