将二维字符串数组传递给函数时出错 (C++)

Posted

技术标签:

【中文标题】将二维字符串数组传递给函数时出错 (C++)【英文标题】:Error passing a 2D Array of Strings to a Function (C++) 【发布时间】:2013-12-02 01:28:23 【问题描述】:

我需要创建一个程序来输入 3 只猴子在一周中的每一天吃掉的食物量。输入需要存储在二维数组中。此外,任何循环都必须包含在辅助函数中,而不是 main() 中。每当我尝试将二维数组传递给函数时,都会出现 2 个主要错误。

1) 31:69:错误:'char []' 的初始化程序太多

2) 39:35:错误:数组下标的无效类型“float[int]”

谁能告诉我我做错了什么?我认为我错误地初始化了字符串数组,然后错误地将其作为参数传递,但我似乎无法找出正确的方法。

#include <iostream>     // input/output declarations
#include <iomanip>      // i/o manipulator declarations
using namespace std;

const int NUMBER_OF_MONKEYS = 3;

typedef char day[];
void getAmountEaten(float &);

int main()

    float monkeyFood[NUMBER_OF_MONKEYS][7];     // 3 rows for monkeys, 7 columns for days
    getAmountEaten(monkeyFood);

    return 0;


void getAmountEaten(float &monkeyFood)

    day    dayOfWeek = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat";
    int    monkeyNumber,
           dayNum;

    for (monkeyNumber = 0; monkeyNumber < NUMBER_OF_MONKEYS; monkeyNumber++)
        for (dayNum = 0; dayNum < 7; dayNum++)
        
            cout << "Enter pounds of food eaten by monkey " << monkeyNumber << "on " << dayOfWeek[dayNum];
            cin  >> monkeyFood[monkeyNumber][dayNum];
        

【问题讨论】:

为什么他们在教授容器类的正确方法之前一直教授原始 C 数组......尤其是数组参数的复杂性是一个高级主题,因为通常不应该使用它们,那么为什么要浪费有限的课程时间来教他们。 【参考方案1】:

主要问题是函数的参数。您正在尝试通过引用将二维数组传递给函数,但该函数只能使用通过引用传递单个变量作为参数。

【讨论】:

【参考方案2】:

由于您将二维数组作为参考传递,并且您在编译时拥有二维数组的大小!

使用这个void getAmountEaten(float (&amp;)[3][7]);

void getAmountEaten(float (&monkeyFood)[3][7])

    /****/

而不是void getAmountEaten(float &amp;);

对于字符部分:

    您正在创建一个字符数组。但是您正在使用字符数组初始化每个元素的 char 数组。

    这里:dayOfWeek = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat";

    “Sun”“Mon”比单个字符大小占用更多空间。

    您在创建字符数组时使用了错误的语法。

    如果您要创建一个“字符数组”数组,请使用:

    typedef char* day

    day dayOfWeek[7] = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat";

    但是上面的代码会抛出警告,使用 string 类可以避免。

【讨论】:

以上是关于将二维字符串数组传递给函数时出错 (C++)的主要内容,如果未能解决你的问题,请参考以下文章

将二维数组传递给 double function_name 时出错

无法将二维数组传递给 C++ 中的辅助函数

C++:使用函数为二维数组分配内存时出错

将二维数组传递给 C++ 函数

C ++将值传递给函数中的二维字符数组

在 C/C++ 中传递二维数组时出错