C++:使用枚举类型进行迭代
C++: Iterate using enum type
我有这些代码:
for (i = 0; i <= WND_WRL; i++) {
syslog(LOG_ERR, "TESTE i=%d WND_WRL=%d", i,WND_WRL);
}
for (i = 0; i <= WND_WRL; i++) {
syslog(LOG_ERR, "OnScrDsp for i=%d WND_WRL=%d", i,WND_WRL);
m_pWnd[i] = gtk_window_new(GTK_WINDOW_POPUP);
assert(m_pWnd[i]);
}
第一个只是解释我的问题。第二个确实是我的问题。
第二个代码的来源可以在这里找到:https://github.com/HuayraLinux/intel-classmate-function-keys/blob/master/OnScrDsp.cpp
问题:
WND_WRL变量来自
typedef enum {
WND_BRG,
WND_DSP,
WND_WRL,
} WND_ID;
结构。
在第一个代码中,我可以看到我迭代到 2 (0,1,2),WND_WRL将始终为 2。问题出在第二代码中:即使WND_WRL打印 2 个值,对于 将迭代 i 直到接收 SIGV 信号 (11) 并破坏我的应用程序(这里它以 i=384 停止)。我能理解为什么384,我不关心这个。
我不明白的是为什么相同的条件提供不同的方式。如果我将WND_WRL更改为数字 2,我会得到正确的代码和正确的应用程序执行。
我的第一个想法是第二个块,可能会更改WND_WRL值,但没有发生。
我可以理解这段代码是否写错了内存位置,但我总是看到WND_WRL值为 2。
溶液:
将表达式"i <=WND_WRL"更改为"i
变量
m_pWnd
在源代码中定义为指针数组,大小为 2,因此有效索引为 0 或 1。
GtkWidget *m_pWnd[WND_WRL];
但是你的循环i <= WND_WRL
,所以i=2
的情况会崩溃
m_pWnd[i] = gtk_window_new(GTK_WINDOW_POPUP);
相关文章:
- 如何在c++迭代器类型中包装std::chrono
- 定义模板参数的迭代器类型
- C++以迭代方式搜索混合类型地图
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 专门C++使用指针值类型的通用迭代器的模板函数?
- C++类字符串类型的迭代器
- 在迭代模板类型列表时无法停止递归
- 使用概念对具有特定值类型的任何容器进行 C++ 迭代
- 类型不可知的抽象以使用相同的运行时接口处理正向和反向迭代器和范围?
- 迭代时将指向differents类型的指针保存在std::向量中
- 如何转换不同类型的迭代器
- 如何从迭代器中找到对的类型
- C++不兼容的迭代器类型
- 如何确定迭代器在 c++ 模板函数中指向的对象的类型?
- 如何迭代类型:mimeType
- 可变参数模板:迭代类型/模板参数
- 具有特定元素类型的常规可迭代类型
- 如何将任何可迭代类型作为函数参数传递
- 匹配可迭代类型(具有begin()/end()的数组和类)
- 在c++中,可迭代类型应该是非多态的