2016-04-21 94 views
0

我只是在学习C++,并试图理解数组。所以请原谅我对这里的错误的无知。无法将std :: array转换为int?

#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()); 
} 

Error: Can't Convert 'std::array' to 'int*' for arg '1'to void 'readArray'

我将如何解决这一问题?

+0

有很多错误,例如** ** readArray采用指针作为第一个PARAM和你是通过引用而不是价值传递。 ** end()**指向数组的最后一项,而不是实际大小。 – Joel

回答

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); 
} 
2

只需浏览some reference发现,std::arrayT* 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是有适当的beginend()重载一个类型。

这是没有意义的,如果你尝试使用ç解决方案来标记C++ 11问题,