数组具有不完整的元素类型“bool”
所以是的,这是错误,我不知道如何解决这个问题: test.c:5:12: 错误:数组有不完整的元素类型 'bool []'
这是更大代码的一部分,但包含所有相关内容。
#include <stdio.h>
#include <cs50.h>
int candidate_count = 3;
bool locked[][] = {locked[0][1] = false, locked[0][2] = false, locked[1][0] = false, locked[1][2] = false, locked[2][0] = false, locked[2][1] = false};
int main(void)
{
int lockedCount = 0;
for(int i = 0; i < candidate_count; i++)
for(int j = 0; j < candidate_count; j++) {
if(locked[i][j] == false) {
locked[i][j] = true;
printf("locked %i vs %in", i, j);
}
if(i == candidate_count - 2) {
for(int k = 0; k < candidate_count; k++)
if(locked[k][j] == true) {
lockedCount += 1;
printf("locked %i vs %in", i, k);
}
if(lockedCount == 0) {
printf("didn't %i vs %in", i, j);
break;
}
else {
locked[i][j] = true;
printf("locked %i vs %in", i, j);
}
}
}
}
回答
这些数组的声明和初始化
bool locked[][] = {locked[0][1] = false, locked[0][2] = false, locked[1][0] = false, locked[1][2] = false, locked[2][0] = false, locked[2][1] = false};
不正确,至少因为数组类型的元素bool[]是不完整的类型。
你需要写例如
bool locked[][3] =
{
{ [1] = false, [2] = false },
{ [0] = false, [2] = false },
{ [0] = false, [1] = false }
};
或者或者喜欢
bool locked[][3] =
{
[0] = { [1] = false, [2] = false },
[1] = { [0] = false, [2] = false },
[2] = { [0] = false, [1] = false }
};
实际上这些声明和初始化等价于
bool locked[3][3] =
{
false
};
因为声明中数组的所有元素都由零初始化,零是宏的值false..
或者由于数组具有静态存储持续时间,因此默认情况下由零初始化。所以你甚至可以写
bool locked[3][3];
而您忘记包含 header <stdbool.h>。最好包含所需的明确标头。
这是一个演示程序。
#include <stdio.h>
#include <stdbool.h>
bool locked[][3] =
{
{ [1] = false, [2] = false },
{ [0] = false, [2] = false },
{ [0] = false, [1] = false }
};
int main(void)
{
// your code goes here
return 0;
}