2016-04-21 12 views
0

Ich lerne gerade C++ und versuche Arrays zu verstehen. Also vergib mir meine Unwissenheit darüber, was hier falsch ist.Kann std :: array nicht in int konvertieren?

#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'

Wie würde ich dieses Problem beheben?

+0

Es gibt eine Menge Fehler, zum Beispiel ** ** readarray verwendet einen Zeiger als erstes param und Sie überschreiten den Wert statt durch Referenz. ** end() ** zeigt auf das letzte Element des Arrays, nicht auf die tatsächliche Größe. – Joel

Antwort

2

Sie können nicht zu int* konvertieren, wie Compiler sagt. Für eine solche Umwandlung kann man das gute alte Array verwenden:

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

Auch wird Interator geändert von Null zu beginnen. Wenn Sie std::array dann müssen verwenden std::array::begin() und 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

Nur some reference wechseln Sie zu entdecken, dass std::array ein T* data() und ein constexpr size_type size(), die können und zu diesem Zweck verwendet werden sollen.

Aber das ist eine schlechte Lösung. Die beste Lösung wäre Iteratoren direkt zu verwenden, zB:

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

Welche T sein eine Art erwarten würde, die richtigen begin und end() Überlastungen hat.

Es macht keinen Sinn, Fragen mit C++ 11 zu markieren, wenn Sie C Lösungen zu verwenden versuchen,

Verwandte Themen