首页 > 解决方案 > 数组具有不完整的元素类型“布尔”

问题描述

所以是的,这是错误,我不知道如何解决这个问题: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);
                }
            }
        }
}

标签: cmultidimensional-arrayinitializationbooleancs50

解决方案


这些声明和初始化一个数组

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

而且您忘记了包含标题<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;
}

推荐阅读