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

Jac*_*k J 3 c++ arrays function c++11

我正在尝试一下这个 YouTube视频教程系列的c ++ 11阵列.虽然我不是很熟练使用我的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] << " | ";
    }
}
Run Code Online (Sandbox Code Playgroud)

使用非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) 我正在关注的视频使用相同的代码,但没有收到此错误.

小智 9

正如您所看到的,在您使用的视频中,该人使用静态的C风格数组,可以隐式转换为T*BUT您使用的是c ++ 11数组,它没有隐式转换为静态数组.虽然,C++ 11的数组类具有方法数据,可以直接访问底层数据,这将在您的情况下执行.

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

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

这适用于任何大小,你不需要为大小传递另一个(不需要的)参数;)