布尔返回 24
Posted
技术标签:
【中文标题】布尔返回 24【英文标题】:bool returning 24 【发布时间】:2015-02-14 00:28:25 【问题描述】:我正在用 C++ 创建一个库,并且有一个总是错误的布尔值,但是当我从另一个项目打印它时,它是 24。
库代码
void Window::update()
closeRequested = false;
其他项目
int main(int argc, char **argv)
init();
wnd = new Window();
while (1 == 1)
wnd->update();
std::cout << wnd->closeRequested << std::endl;
wnd->~Window();
end();
return 0;
【问题讨论】:
在窗口类中。 首先,欢迎来到 ***。 你不应该直接调用析构函数。而是使用delete
(但在这种情况下,您似乎甚至不需要使用new
分配的内存)。
closeRequested
的定义是什么?
它们是一个 SDL 窗口,它会检查是否按下了关闭按钮。
【参考方案1】:
在 C++ 中,对于 true
和 0
对于 false
,布尔变量总是返回 1
。您获得不同值的事实意味着内存损坏,或者您没有获得布尔值。
我的投票是第二个。如果对象的定义在两个不同的源文件中不同,则对象的内存布局可能会发生变化,您将获得与写入的值不对应的部分对象。
对象布局的不匹配可能以不同的方式引起。一些常见的:
两个源文件之间的结构填充设置不同。 不同的 typedef 或#define
宏导致成员的类型不同。
在一个源与另一个源中评估不同的条件宏。
【讨论】:
我其实认为 0 = False 非零 = True,不一定是 1。 int isTrue = 24,如果 isTrue 将评估为 true。 我该如何解决这个问题? @ventsyv 如果您正在评估任何其他类型的整数类型,则为 true,但不是bool
。
@Lewis 你只需要深入挖掘才能找到原因。一个好的第一步是在两个地方的对象上使用sizeof
,看看它是否匹配。
@Lewis:我要尝试的第一件事是进行干净的重建。确保所有内容都使用相同版本的标头构建。以上是关于布尔返回 24的主要内容,如果未能解决你的问题,请参考以下文章