C++:使用枚举类型进行迭代

C++: Iterate using enum type

本文关键字:迭代 类型 枚举 C++      更新时间:2023-10-16

我有这些代码:

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);