数组的元素类型不完整 'bool'
Array has incomplete element type '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 %i\n", 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 %i\n", i, k);
}
if(lockedCount == 0) {
printf("didn't %i vs %i\n", i, j);
break;
}
else {
locked[i][j] = true;
printf("locked %i vs %i\n", 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>
。最好明确包含所需的 header。
这是一个演示程序。
#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;
}
是的,这是错误,我不确定如何解决这个问题: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 %i\n", 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 %i\n", i, k);
}
if(lockedCount == 0) {
printf("didn't %i vs %i\n", i, j);
break;
}
else {
locked[i][j] = true;
printf("locked %i vs %i\n", 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>
。最好明确包含所需的 header。
这是一个演示程序。
#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;
}