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