我只是在学习c ++而且正在尝试理解数组。所以原谅我对这里的错误一无所知。
#include <iostream>
#include <string>
#include <array>
using namespace std;
void readArray(int *readfile, int ArraySize){
int Interator;
for(Interator = 1; Interator < ArraySize; Interator++){
cout << " " << readfile[Interator];
}
}
int main(){
std::array<int, 5> array2={{1, 2, 3, 4, 5}};
readArray(array2, array2.end());
}
错误:无法转换&#st; :: array&#39;到&#39; int *&#39;对于arg&#39; 1&#39;无效&#39; readArray&#39;
我该如何解决这个问题?
答案 0 :(得分:2)
您不能像编译器那样将std::array
转换为int*
。对于这种转换,您可以使用普通旧数组:
void readArray(int *readfile, int ArraySize)
{
int Interator;
for(Interator = 0; Interator < ArraySize; Interator++)
{
cout << " " << readfile[Interator];
}
}
int main()
{
//std::array<int, 5> array2={{1, 2, 3, 4, 5}};
int array2[] = {1, 2, 3, 4, 5};
readArray(array2, 5);
}
此外,Interator
更改为从零开始。如果您需要std::array
,请使用std::array::begin()
和std::array::begin()
:
void readArray2(const std::array<int, 5>& a)
{
for (auto elem : a)
cout << " " << elem;
}
int main()
{
std::array<int, 5> array2={{1, 2, 3, 4, 5}};
//int array2[] = {1, 2, 3, 4, 5};
readArray2(array2);
}
答案 1 :(得分:2)
只需浏览some reference即可发现std::array
有一个T* data()
和一个constexpr size_type size()
,可以而且应该用于此目的。
但这是一个糟糕的解决方案。最好的解决方案是直接使用迭代器,例如:
template <typename T> void readArray(const T& data) {
for (const auto& element : data)
cout << element;
}
std::array<int, 5> data1 = { 1, 2, 3, 4, 5};
readArray(data1);
std::vector<int> data2 = {1, 2, 3, 4, 5};
readArray(data2);
std::list<int> data3 = {1, 2, 3, 4, 5};
readArray(data3);
哪个版本会T
成为具有正确begin
和end()
重载的类型。
如果您尝试使用 C 解决方案,使用 C ++ 11 标记问题是没有意义的,