我正在通过跟随 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/