C++ 布尔值未更改
我试图用一个布尔值来保持我所处的状态。 在我的头文件中,我声明:C++ 布尔值未更改,c++,qt,C++,Qt,我试图用一个布尔值来保持我所处的状态。 在我的头文件中,我声明: bool *modified; 在类构造函数中,我将状态初始化为false: bool initState = false; modified = &initState; 然后我有一个按钮将状态更改为true: bool change = true; modified = &change; 我还有一个按钮可以查看状态: if(!*modified){ // doing something } els
bool *modified;
在类构造函数中,我将状态初始化为false:
bool initState = false;
modified = &initState;
然后我有一个按钮将状态更改为true:
bool change = true;
modified = &change;
我还有一个按钮可以查看状态:
if(!*modified){
// doing something
} else{
// do something else
}
问题是如果我真的改变了状态,*修改后的仍将为true。我不知道问题出在哪里。有人知道它在哪里吗 试试这个
if (!(*modified))
else
bool change = true;
*modified = change;
bool initState = false;
*modified = initState;
您正在更改
modified
的值,这是一个bool*
,可能指向堆栈分配的数据,这些数据将在函数返回时销毁。您想更改modified
所指向的值
bool initState = false;
*modified = initState;
bool change = true;
*modified = change;
这是假设修改后的指针实际分配在某个位置。尝试此代码
bool*修改
bool initState = false;
modified = initState; false
bool change = true;
modified = change; true
if ( *modified != initState)
{
do something
}
else
{
do something
}
为什么要使用布尔指针,而普通布尔指针就可以了?您的代码片段不够完整,无法解释您的错误是change
和initState
局部变量,这是偶然的?将modified
的定义放在头中不是一个好主意,因为如果有多个源文件包含它,您将面临多个定义的风险。最好使用extern
在头文件中声明,并在源文件中定义一次。如果您只有一个普通布尔值,那么分配一个本地布尔值将保持使用指针使问题变得复杂的状态。我现在就明白了。我现在换成普通的傻瓜了。谢谢。我知道我做错了什么。根据上面的评论,我将使用一个简单的bool。