2013-02-01 9 views
8

このベクターを印刷するには、私のvoid print関数で問題があります。 。私はそれが「のstd ::アロケータと話しているものはかなりわからないんだけど、私はこれらのエラーを取得:私はちょうどに、V OUT印刷したいベクトルの要素を印刷する方法C++

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

:ここ

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 

ファイルです画面。任意のヘルプ?

+0

はあなたがあまりに場所でコンパイラのポイントを見たことがありますか? –

答えて

7

は、あなたがInitializeからベクトルを生成したい、あなたが行うことができます:あなたが呼び出す今

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

void Initialize(vector<int>& v); 

はベクトルを印刷するには

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

の関数定義を忘れずに変更してください、Printを使用して上記の新しい署名と一致させる必要があります。 はまた、あなたは、関数のパラメータをシャドウローカル変数vを再定義する、あなただけのものconst参照によってベクトルを渡し、その行をコメントアウトする必要がありますされています

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

どうすればそれをメインから呼び出すことができますか? void Print(ベクトル v)? – TheNameHobbs

+0

私の更新された回答を見る – billz

7

あなたはconst参照渡しと無関係のベクトルを削除する必要があります。

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

へのもう一つの方法そのようなイテレータを使用することです、それをプリントアウト:

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

またはC++ 11であなたがそうのようにそれを行うことができます。

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

私はあなたが期待するようなあなたのInitialize()機能が動作するとは思いませんそれに。既存のベクトルの値を変更するのではなく、コピーを作成して破棄するように見えます。あなたの関数の宣言と定義が一貫していない

+0

彼はconst参照でto_haveしていません。 –

+0

Trueですが、関数内で何も修正していないので、constの正確さについては良いアドバイスです。 – Rapptz

関連する問題