【问题标题】:How do I pass a 2D array into a function (C++)?如何将二维数组传递给函数(C++)?
【发布时间】:2019-10-18 00:47:56
【问题描述】:

我有两个 for 循环,它们处理来自文件的数据并将其存储到一个数组中,方便地适当地索引每个元素。我想将此数组传递给一个函数并对其执行一些计算,但它给了我一个错误:“错误:没有匹配的函数 调用 'year_range'"。

我试图将它作为 item[][] 传递,但编译器希望我指定索引。我想将整个数组传递给函数,以便对其执行一些计算。

void year_range(string item[]);

int main()
{
    string item[75][5];
    for (int row = 0; row < 74; row++)
    {
        for (int col = 0; col < 4; col++)
        {
            getline(fin,item[row][col], ',');
        }
        getline(fin, item[row][4], '\n');  
    }
    year_range(item);
}

void year_range(string item[])
{
  // processing item array
}

我希望整个“item”数组成功通过函数year_range,没有错误。

【问题讨论】:

  • 提示:不要。在 C++ 中使用 std::vector。使用 C 数组会导致整个世界的伤害。您还需要养成通过引用而不是数组/指针传递事物的习惯,以及使用标准库迭代器和 for (auto x : y) 表示法之类的事物。

标签: c++ string function


【解决方案1】:

它想要第二维的长度。试试:

void year_range(string item[][5]);

请注意,这仅适用于第二维为 5 的数组。要获得更好、更通用的方法,请参阅semi-duplicate question

另请注意:您必须在您的实现和声明中更改它,即使我没有在您的实现中显示更改它。

【讨论】:

  • 注意:我将其称为半重复,因为该问题询问的是** 表示法,而不是[][num] 表示法。但如果其他人认为这是一个骗局,请随时关闭。
  • 它给了我这个错误:“错误:预期的表达式 year_range(item[][5]);”
  • 你两个地方都改了吗?在声明和实现中?
  • omg 是的,它正在工作,这是一个愚蠢的错误。非常感谢,已经卡了一段时间了:)
  • 不客气。如果这解决了您的问题,请随时单击答案旁边的复选标记接受此答案。
【解决方案2】:
void year_range(string item[]);

这里,参数的类型是“指向字符串的指针”。

string item[75][5];
year_range(item);

当您使用数组作为值时,它将隐式转换为指向第一个元素的指针。这叫做腐烂。 item 是由 5 个字符串组成的 (75) 个数组组成的数组。由于元素是由 5 个字符串组成的数组,因此指向元素的指针就是指向由 5 个字符串组成的数组的指针。

因此,您将一个指向 5 个字符串数组的指针传递给一个接受指向字符串的指针的函数。由 5 个字符串组成的数组与字符串的类型不同,因此这不起作用。您可以更改 year_range 以接受指向 5 个字符串的指针,该指针与您尝试传递的(衰减的)对象匹配:

void year_range(string item[][5]);  // like this
void year_range(string (*item)[5]); // or this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多