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;
}
}
基本上,函数的逻辑是:
- 创建一个变量,用于保存数组(数组
newHeaderMsg.headerText[]
)第一个元素的内存位置。该变量称为 strstart
.
- 设置
strstart
的内存位置等于'D'
- 获取当前系统时间,并将其值传递给变量
timeWarningStarted
.
- 如果在 GUI 上进行了特定选择(即
warningSelect
设置为 1
,开始计时,并将 warningTimeout
变量设置为 15(15 秒)。然后获取当前系统时间,并将其值设置为变量timeWarningDisplayed
.
- 如果定时器已经启动,将数组中第一个元素的内存位置(即
strstart
的内存位置)的变量设置为'R'。
- 检查
timeWarningDisplayed
变量是否大于或等于timeWarningStarted
和warningTimeout
的总和(如果是,那么警告已经显示了预期的长度时间)
- 如果
timeWarningDisplayed
大于或等于timeWarningStarted
和warningTimeout
的和,则将*strstart
的值设置为[=28=的值],即将其设置回 'D'。
- 否则,如果
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
我的 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
. - 如果在 GUI 上进行了特定选择(即
warningSelect
设置为1
,开始计时,并将warningTimeout
变量设置为 15(15 秒)。然后获取当前系统时间,并将其值设置为变量timeWarningDisplayed
. - 如果定时器已经启动,将数组中第一个元素的内存位置(即
strstart
的内存位置)的变量设置为'R'。 - 检查
timeWarningDisplayed
变量是否大于或等于timeWarningStarted
和warningTimeout
的总和(如果是,那么警告已经显示了预期的长度时间) - 如果
timeWarningDisplayed
大于或等于timeWarningStarted
和warningTimeout
的和,则将*strstart
的值设置为[=28=的值],即将其设置回 'D'。 - 否则,如果
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