C++ 将字符串的2D数组传递给函数(C+;+;)时出错

C++ 将字符串的2D数组传递给函数(C+;+;)时出错,c++,arrays,C++,Arrays,我需要创建一个程序,输入一周中3只猴子每天所吃的食物量。输入需要存储在二维数组中。此外,任何循环都必须包含在辅助函数中,而不是main()中。每当我试图将二维数组传递给函数时,就会出现两个主要错误 1) 31:69:错误:“char[]”的初始值设定项太多 2) 39:35:错误:数组下标的类型“float[int]”无效 有人能告诉我我做错了什么吗?我认为我错误地初始化了字符串数组,然后错误地将其作为参数传递,但我似乎无法找到正确的方法 #include <iostream>

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

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];
        }
}
#包含//输入/输出声明
#包括//i/o操纵器声明
使用名称空间std;
猴子的数量=3;
typedef char day[];
void getamountaten(float&);
int main()
{
float monkeyFood[猴子的数量][7];//猴子3行,7列,每天
Getamountaten(monkeyFood);
返回0;
}
void getamountaten(漂浮物和monkeyFood)
{
day dayOfWeek={“太阳”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”};
int monkeyNumber,
戴纳姆;
用于(monkeyNumber=0;monkeyNumber<猴子的数量;monkeyNumber++)
对于(dayNum=0;dayNum<7;dayNum++)
{

cout因为您正在传递一个2D数组作为引用,并且您在编译时拥有2D数组的大小

使用此
void getamountaten(float(&)[3][7]);

void getAmountEaten(float (&monkeyFood)[3][7])
{
    /****/
}
而不是
void getamountaten(float&);

对于char部分:

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

    这里:
    dayOfWeek={“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”、“Sat”};

    “Sun”“Mon”占用的空间大于单个字符大小

  • 创建字符数组时使用了错误的语法

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

    typedef char*day

    daydayofweek[7]={“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”、“Sat”};

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


  • 因为您正在传递一个2D数组作为引用,而且您在编译时拥有2D数组的大小

    使用此
    void getamountaten(float(&)[3][7]);

    void getAmountEaten(float (&monkeyFood)[3][7])
    {
        /****/
    }
    
    而不是
    void getamountaten(float&);

    对于char部分:

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

    这里:
    dayOfWeek={“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”、“Sat”};

    “Sun”“Mon”占用的空间大于单个字符大小

  • 创建字符数组时使用了错误的语法

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

    typedef char*day

    daydayofweek[7]={“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”、“Sat”};

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


  • 主要问题是函数的参数。您试图通过引用将2D数组传递给函数,但函数只能通过引用传递单个变量作为参数。

    主要问题是函数的参数。您试图通过引用将2D数组传递给函数,但函数只能通过引用传递一个变量作为参数。

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