2013-02-01 12 views
8

Mam problem z funkcją drukowania pustych przestrzeni, aby wydrukować ten wektor. . Nie jestem pewien, co to mówi o z „std :: podzielnika otrzymuję te błędy:Jak drukować elementy w wektorze C++

st1.cpp: In function ‘void Print(std::vector<int, std::allocator<int> >)’: 
st1.cpp:51: error: declaration of ‘std::vector<int, std::allocator<int> > v’ shadows a  parameter 

Oto plik:

#include <iostream> 
#include <string> 
#include <vector> 
#include <stack> 
#include <algorithm> 
using namespace std; 

void Initialize(); 
void Print(); 

int main() 
{ 
stack<string> s1, s2; 
s1.push("b"); 
s2.push("a"); 

if (s1.top() == s2.top()) 
{ 
    cout << "s1 == s2" << endl; 
} 
else if (s1.top() < s2.top()) 
{ 
    cout << "s1 < s2" << endl; 
} 
else if (s2.top() < s1.top()) 
{ 
    cout << "s2 < s1" << endl; 
} 
else 
{ 
    return 0; 
} 

vector<int> v; 
Initialize(); 
Print(); 
} 

void Initialize(vector<int> v) 
{ 
int input; 
cout << "Enter your numbers to be evaluated: " << endl; 
while(input != -1){ 
    cin >> input; 
    v.push_back(input); 
    //write_vector(v); 
} 
} 

void Print (vector<int> v){ 
vector<int> v; 
for (int i=0; i<v.size();i++){ 
    cout << v[i] << endl; 
} 
} 

Chcę po prostu wydrukować v się ekran. Każda pomoc?

+0

Pan spojrzał w miejscu punktów kompilator też? –

Odpowiedz

7

Twoja deklaracja funkcji i definicji nie są spójne, aby wygenerować wektor z Initialize można zrobić:

void Initialize(vector<int>& v); 

Aby wydrukować Vector:

void Print(const vector<int>& v); 

Teraz zadzwonić:

vector<int> v; 
Initialize(v); 
Print(v); 

Nie zapomnij zmienić definicji funkcji Initialize, Print, aby dopasować nowy podpis podany powyżej. także jesteś przedefiniowanie lokalną zmienną v który cienie parametr funkcji, wystarczy wypowiedzieć się tej linii, również przechodzą przez wektor const ref:

void Print (const vector<int>& v){ 
    //vector<int> v; 
    for (int i=0; i<v.size();i++){ 
    cout << v[i] << endl; 
    } 
} 
+0

Jak mogę to nazwać z głównego? void Print (wektor v)? – TheNameHobbs

+0

zobacz moją zaktualizowaną odpowiedź – billz

7

musiał przejść przez const odniesienia i usuwania obcego wektor.

void Print(const std::vector<int>& v){ 
    for(unsigned i = 0; i< v.size(); ++i) { 
     std::cout << v[i] << std::endl; 
    } 
} 

Innym sposobem wydrukować go byłoby użyć iteratorów tak:

void Print(const std::vector<int>& v) { 
    std::vector<int>::iterator it; 
    for(it = v.begin(); it != v.end(); ++it) { 
     std::cout << (*it) << '\n'; 
    } 
} 

czy w C++ 11 można to zrobić tak:

void Print(const std::vector<int>& v) { 
    for(auto& i : v) 
     std::cout << i << '\n'; 
} 

Nie sądzę czynność Initialize() działa jak można oczekiwać to do. Wydaje się, że po prostu tworzy się kopię, a następnie ją odrzuca, nie modyfikując żadnych wartości istniejącego wektora.

+0

Nie ma _have to_ pass przez odniesienie do const. –

+0

To prawda, ale jest to dobra rada dla poprawności const, ponieważ nie modyfikuje niczego w funkcji. – Rapptz