c++11数组传递给函数错误

标签 c++ arrays function c++11

我正在通过跟随 this 来尝试一个 c++11 数组YouTube 视频教程系列。虽然我在使用我的 IDE 方面不是很熟练,但我有我的 IDE,Eclipse 和 Codeblocks,设置为让编译器遵循 C++0x ISO 语言标准 [-std=c++0x],这至少允许它们了解 c++11 数组的语法,例如 array <double, 5> rainfall;两者都以同样的方式回应。我编写的以下代码将此数组传递给打印出来的函数。

#include <iostream>
#include <array>

using namespace std;

void printArray(double[], int);

int main()
{
    array <double, 5> rainfall;

    rainfall[0] = 2.3;
    rainfall[1] = 0.3;
    rainfall[2] = 0.0;
    rainfall[3] = 4.1;
    rainfall[4] = 0.5;

    printArray(rainfall, 5);

    return 0;
}

void printArray(double array[], int size)
{
    for(int i = 0; i < size; i++)
    {
        cout << array[i] << " | ";
    }
}

使用非 C++11 数组,例如 double rainfall[5]这工作正常,但是 array <double, 5> rainfall有一个错误显示 cannot convert 'std::array<double, 5u>' to 'double*' for argument '1' to 'void printArray(double*, int)我正在关注的视频使用相同的代码,但没有收到此错误。

最佳答案

如您所见,在您使用的视频中,这个人使用了一个静态的 c 样式数组,它可以隐式转换为 T* 但您使用的是 c++11 数组,它没有隐式转换到静态数组。不过,C++11 的数组类具有方法数据,可让您直接访问底层数据,这将适用于您的情况。

但在这种情况下,如果你想将函数与 c++11 数组一起使用,你可以像这样进行重载:

template <typename T, size_t Size> void printArray(const std::array<T, Size>& arr);

这适用于任何尺寸,您不需要为尺寸传递另一个(不需要的)参数;)

关于c++11数组传递给函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771391/

相关文章:

mysql - 如何创建 MySQL 函数来检查 JSON 有效性?

c++ - Cmake区分libc++和libstdc++

c++ - CUDA Thrust reduce_by_key 使用更少的内存

c++ - 匹配线段 - 稳健且快速的方式

arrays - 我如何从 Mongoose 的数组中找到对象

jquery 按子元素的大小对 ul 元素进行排序

c++ - 确定 QTreeWidget 列的可见大小

javascript - 检查具有相同 "rules"的多个变量

ruby - 在 Ruby 数组中(按键)删除重复项的最快/单行方法?

c# - 我们如何在 C# 中解释 => Something => Something2 => Something3