2016-04-21 165 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問題,