c++11数组传递给函数错误
c++11 array passing to function error
我正在尝试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的数组类有方法data,它可以让你直接访问底层数据,这在你的情况下就可以了。
但是在这种情况下,如果你想在c++11数组中使用这个函数,你可以这样重载:
template <typename T, size_t Size>
void printArray(const std::array<T, Size>& arr);
这个方法适用于任何大小,并且不需要为size传递另一个(不必要的)参数;)
您可以将rainfall.data()
传递给函数。std::array<T, N>
不能隐式转换为T[N]
。
或者您可以将函数定义为
void printArray (const array <double, 5>& myarray, int size)
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误