2

我在这里为 C99 做错了什么:

struct chess {
    struct coordinate {
        char piece;
        int alive;
    } pos[3];
}table[3] =
{
    {
      {'Q', (int)1},{'Q', (int)1},{'Q', (int)1},
      {'B', (int)1},{'B', (int)1},{'B', (int)1},
      {'K', (int)1},{'K', (int)1},{'K', (int)1},
    }
};

它给出了错误:

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token

我希望能够访问数据,例如在结构中具有结构:

table[row].pos[column].piece
table[row].pos[column].alive

我尝试了几种组合,但似乎没有一种适用于这种情况。在此之前我已经完成了以前的结构硬编码初始化,但这次没有在结构中进行结构。

有什么建议么?

4

2 回答 2

5

如上所述,尝试将 char 文字括在单引号中,并添加额外的大括号以使内部数组成为初始化列表。

struct chess
{
   struct coordinate
   {
       char piece;
       int alive;
   } pos[3];
}
table[3] =
{  // table of 3 struct chess instances...
   { // ... start of a struct chess with a single member of coordinate[3]...
      { // ... this is where the  coordinate[3] array starts... 
         // ... and those are the individual elements of the  coordinate[3] array
         {'Q', 1}, {'Q', 1}, {'Q', 1}
       }
    },
    {{{'B', 1}, {'B', 1}, {'B', 1}}},
    {{{'K', 1}, {'K', 1}, {'K', 1}}}
};
于 2016-10-31T08:46:56.503 回答
4
struct chess {
    struct coordinate {
        char piece;
        int alive;
    } pos[3];
} table[3] =
{
    {
        .pos = {{ .piece = 'Q', .alive = 1 },
                { .piece = 'Q', .alive = 1 },
                { .piece = 'Q', .alive = 1 }
               }
    },
    {
        .pos = {{ .piece = 'B', .alive = 1 },
                { .piece = 'B', .alive = 1 },
                { .piece = 'B', .alive = 1 }
               }
    },
    {
        .pos = {{ .piece = 'K', .alive = 1 },
                { .piece = 'K', .alive = 1 },
                { .piece = 'K', .alive = 1 }
               }
    }
};

它似乎工作。请注意大括号的位置,请尝试理解您输入的内容。这是阅读答案的方法:

  1. table[3] 是一个数组。所以初始化器以'{'开始并以'};'结束,每个元素由','分隔
  2. 该数组的每个元素都是一个“结构国际象棋”。所以每个子元素都以'{'开始并以'}'结束
  3. 在每个“结构国际象棋”中,您都有一个数组“pos [3]”。所以另一个 sub-sub '{' 和 '}'
  4. 每个 'pos' 是一个结构,所以有 sub-sub-sub '{' 和 '}'
  5. 终于,田野来了。使用 C99 初始化器列表使您的代码更简洁。C 中的双引号是 char*,而不是 char。使用单引号

建议:

  • 尽量减少“难以阅读”的代码量。它会为你服务
  • 我从不使用嵌套结构。需要时,将它们的代码分开并创建初始化它们的函数。
  • CPPReference很有用
  • 为您的结构使用好的变量名称和标识符。当我读到'pos'时,我认为它是国际象棋上的一个位置((x,y)坐标与信息)。
于 2016-10-31T08:58:47.193 回答