【问题标题】:How to use a for each loop with a multi-dimensional array in C++如何在 C++ 中使用带有多维数组的 for each 循环
【发布时间】:2014-06-22 16:31:05
【问题描述】:

好的,首先你应该注意到我使用的是 Visual Studio 2010。无论如何,我在我的每个循环中都遇到了一个非常奇怪的错误,这对我来说没有任何意义。

BYTE CPUKeys[][0x10] =
{
    {0x28,0x53,0x71,0xD9,0x7B,0x47,0xCC,0x50,0xAF,0x45,0x8D,0xB3,0xED,0x53,0x22,0x13},//Randy//encrypted
    {0x6E,0x38,0xB0,0xEF,0x6E,0x96,0x20,0x16,0xE5,0xCA,0x4B,0xE9,0x23,0x4E,0xC6,0xA5},//Josh//encrypted
    {0x95,0x2C,0x20,0x98,0xF9,0x99,0x28,0x0F,0xEE,0xA7,0x8F,0x48,0x58,0x01,0xB7,0x07},//Falcon//encrypted
    {0x64,0xDC,0x1E,0xFA,0xD2,0xAE,0x57,0x6C,0x0B,0xD0,0x39,0x6A,0x13,0x2C,0x91,0xE0},//Justin//encrypted
    {0x8D,0x82,0x6D,0x71,0x82,0xDC,0x83,0x8F,0x79,0x51,0xB8,0x7C,0x1F,0xC1,0xBF,0xD4},//Bypass//encrypted
    {0x27,0xF2,0xA7,0xF3,0xE2,0xDC,0x01,0x19,0x17,0xF4,0x11,0xFE,0xE9,0xB5,0x0C,0x2C},//Surge//encrypted
    {0x6D,0x7C,0x86,0x9A,0x6A,0xE1,0xD4,0x10,0x76,0x16,0x11,0x7C,0xED,0xB3,0x4D,0x56},//Noel//encrypted
    {0x3D,0x6C,0x88,0x8C,0x9D,0x3A,0xA5,0x40,0x64,0xDF,0xDF,0x8D,0x94,0xFD,0x28,0xF1},//XexRgh//encrypted
    {0x06,0x0D,0x8C,0xB6,0xB6,0x6D,0x29,0xD7,0x41,0xE1,0x13,0x35,0x84,0x80,0x68,0x31}//Zoobzy//encrypted
};

好的,我的多维 BYTE 数组就到这里了。

for each(BYTE ID[0x10] in CPUKeys)
{

每个循环都有我的。发生的奇怪事情是我在 ID 上遇到的错误。错误状态:“for each”迭代器类型“BYTE[16]”与元素类型“BYTE[16]”不兼容。知道为什么会这样说吗?我做错了什么,我该如何解决?

【问题讨论】:

  • for each(BYTE ID[0x10] in CPUKeys) 不是有效的 C++ 构造,请显示确切的语句和错误
  • 我的编译器 (VS 2005) 显示不同的错误:for each statement cannot operate on variables of type 'unsigned char [9][16]',所以你想要的可能是不可能的......
  • 这是我正在使用的全部功能,很抱歉造成混淆。编辑:显然 enter 不会缩进评论的下一行。另外,无论如何评论都太长了:(
  • 你的意思是c++/cli 对吧? (这与c++ 完全不同)
  • @user3765064 只是一个疯狂的猜测:也许BYTE (&ID)[0x10] 有效? (我自己无法检查)

标签: arrays multidimensional-array foreach c++-cli


【解决方案1】:

如果可行,试试这个:

for(auto& rows: CPUKeys)// Iterating over rows
{
    for(auto& elem: rows)
    {
        // iterate every row's column
    }
}

【讨论】:

  • AFAIK Visual Studio 2010 不支持范围循环,不过我已经很久没用过了。
【解决方案2】:

据我所知,C++ 中没有 foeach 循环。 改用两个 for 循环。像这样的

for (int i = 0; i < 9; ++i)
{
   for (int j = 0; j < 16; ++j)
   {
     BYTE value = CPUKeys[i][j];
   }
}

【讨论】:

  • C++11中有foreach循环的语法
  • OP 使用 Visual Studio 2010; for each 似乎是特定于该编译器的语言扩展
  • for(int KeyNum = 1;KeyNum
猜你喜欢
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2016-05-26
  • 2019-09-04
  • 2011-05-12
  • 2017-03-07
相关资源
最近更新 更多