2016-03-31 21 views
1
#include <iostream> 
#include <vector> 

void init() 
{  
    std::vector<double> b; 
    b.push_back(10); 
    return; 
} 

double mean(double *array, size_t n) 
{ 
    double m=0; 
    for(size_t i=0; i<n; ++i) 
    { 
     m += array[i]; 
    } 
    std::cout<<*array<<std::endl; 
    return m/n; 
} 

int test(int *b) 
{ 
    int dist; 
    dist=b[0]; 
    return dist; 
} 

int main() 
{ 
    int x=0; 
    int y=0; 
    //double a[5]={1, 2, 3, 4, 5}; 
    std::vector<double> a; 
    a.push_back(1); 
    a.push_back(2); 
    a.push_back(3); 
    a.push_back(4); 
    a.push_back(5); 
    std::cout<<mean(&a[0], 5)<<std::endl; // will print 3 
    init(); 
    y=test(&b[0]); 
    std::cout<<y<<std::endl; 
    return 0; 
} 

"init"関数でベクトル "b"を初期化し、 "test"関数で値を取得して最終的にmain関数で "y"に戻すことができるかどうかを確認しようとしています。これも可能ですか?この可能性を探るのは単なるテストコードです。参照でベクトルを渡す

+3

どこから始めればいいのですか? 'main'は' int main(int * b) 'として宣言されているのはなぜですか? 'b'はここで何を保持すると思いますか? 'main'は引数を持たないか、ちょうど2つの' int'と 'char *'を持ちます。 – user657267

+0

init()の 'b'はinit()の終了後も存在しません。また、 'main()'の 'b'や' test() 'の' b'にも接続していません。 – drescherjm

+0

私は、 "return = init()"のようにmain関数に "b"を返さなければなりません。私の質問は:init()の現在の形式のmain関数の役割は何ですか? – Far

答えて

2

たぶんあなたが欲しい:メインで

std::vector<double> init() 
{  
    std::vector<double> b; 
    b.push_back(10); 
    return b; 
} 

、その後を:

auto b = init(); 
y = test(&b.at(0)); 

meanを呼び出すとき。サイズをハードコーディングするのではなくa.size()とし、&a[0]の代わりにa.data()を渡すと、ベクターが空の場合にクラッシュしません。

+0

役に立つヒント!私は推奨された改善を反映するために上記のコードを修正しました。 – Far

+0

@Farあなたの質問のテキストを変更しないでおく方が良いでしょう。さもなければ、新しい読者には混乱します。 (あなたの投稿を編集し、 "ロールバック"機能を使用する)。あなたの質問に答えた場合はこの回答を受け入れるか、あなたの意図を明確にするために編集やコメントをすることができます。 –

+0

変更をロールバックしました。 – Far