【问题标题】:Too many initializer values while passing boolean array as function input将布尔数组作为函数输入传递时初始化器值过多
【发布时间】:2020-09-23 14:35:04
【问题描述】:

大家好。我正在解决这个生命游戏问题并尝试传递一个布尔数组:(给定)

game({0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);

进入下面的函数:(给定)

void game(bool cells[], int size, int num_gen) 

但是,我收到了这个错误:太多初始化值 C/C++ (146)

我尝试过,并且能够通过在主函数中声明数组来传递值:

int main(void) 
{
    int cells[]={0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
}

但这是我的学校作业,所以我不应该编辑任何给定的代码/输入/功能。

我现在有点迷路了,如果有任何意见,我将不胜感激。提前致谢!

【问题讨论】:

  • 但这是我的学校作业 -- 这个作业应该用什么计算机语言编写?是 C 还是 C++?
  • 究竟哪一部分是不允许编辑的?因为您将需要更改调用或声明
  • @PaulMcKenzie 从技术上讲它应该在 C 中
  • @UnholySheep 给出了输入(测试用例)和游戏功能。所以我们不应该修改那些
  • 所以你得到的代码不能编译并且应该在不改变任何东西的情况下让它编译?这将是困难的

标签: arrays c boolean


【解决方案1】:
void game(bool cells[], int size, int num_gen) 

函数的第一个参数不是数组。当然,您将参数声明为未指定长度的数组,但此类参数将被调整为指向此类数组元素的指针。在 C++ 中,函数参数永远不是数组。

因此,您正在尝试使用大括号括起来的值列表来初始化指针。值不止一个,所以是错误的(而且值的类型也与指针不兼容)。

您可以创建一个数组,并将指针传递给该数组的元素:

int cells[]={0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
game(cells, std::size(cells), 9);

【讨论】:

    【解决方案2】:

    大括号中的值列表在表达式中无效。你需要的是一个复合文字

    game((bool []){0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);
    

    在花括号段之前看起来像强制转换的语法为您提供类型。您也可以将此语法用于 struct 文字。

    【讨论】:

    • 请注意,这只是 C 语言。 C++ 没有复合文字。很遗憾 OP 有两个标签。
    【解决方案3】:

    您可以为此使用compound literal

    类似

    game((bool []){0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);
    

    【讨论】:

    • 请注意,这只是 C 语言。 C++ 没有复合文字。很遗憾 OP 有两个标签。
    • @Ruslan 哎呀,我的错。它应该在 C 中,但我也想知道如果它在 C++ 中可以做什么
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2020-04-05
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2015-12-26
    • 2015-08-03
    相关资源
    最近更新 更多