2016-04-15 6 views
1

のベクトルを変更し、私はこのように可変Eを宣言する:C++:C++プログラムでshare_ptr要素

shared_ptr<c_t> e = shared_ptr<c_t> (new c_t); 

を次に、Eが初期化されます。

後半のプログラムで、私はこの機能を使用して、電子のサイズを変更したい:

e->change(4); 
クラス C_Tと機能 C_T ::変更は次のように定義されている

class c_t { 

    public: 
    vector<shared_ptr<double>> m; 

    void change(int n) { 
     vector<shared_ptr<c_double>> mm; 
     shared_ptr<double> m_buffer = make_shared<c_double>(); 
     for(int i = 0; i < n; i++) { 
      m_buffer = 3.14 * i; 
      mm.push_back(m_buffer); 
     }; 
     m = mm; 
    }; 
}; 

ただし、この方法は機能しません。 eを読み込むためにイテレータを使用すると、eの値はinfとなります。どうして?変更する方法e

編集: スケールする実際、読むには、電子の値は、クラスC_Tは、この機能を使用しています。

void scaling(double factor) { 
    for (auto it = m.begin(); it != m.end(); ++it) { 
     m *= factor; 
    }; 
}; 
+0

は、なぜあなたは '' c_double'とdouble'を混合していますか?彼らは同じタイプですか?なぜ違う名前になったのですか? – rozina

+0

申し訳ありませんが、これは単なるダミーの例です。実際のクラスはもっと複雑です。 –

+0

また、イテレータを使ってeを読むことはどういう意味ですか? eはコンテナに入っていますか?あなたがeを読むコードを私たちに教えてください。 ps:これがダミーの例であっても、それを完全なものにすることができます(http://stackoverflow.com/help/mcve) – rozina

答えて

1
m_buffer = 3.14 * i; 

m_bufferタイプstd::shared_ptrです。あなたの譲渡は意味をなさない。おそらく、書きたい:

*m_buffer = 3.14 * i; 

また、あなたは、ベクトルの値がiに基づいて異なる値を持つことになりますので、forループの内部m_bufferを宣言したいです。

for(int i = 0; i < n; i++) 
{ 
    std::shared_ptr<double> m_buffer = std::make_shared<double>(); 
    *m_buffer = 3.14 * i; 
    mm.push_back(m_buffer); 
}; 

か短いバージョン:

for(int i = 0; i < n; i++) 
{ 
    mm.push_back(std::make_shared<double>(3.14 * i)); 
}; 

Live demo

+0

@Medicalphysicistあなたはこれがあなたの質問に答えなかったと言っていますか?コードがコンパイルされ、動作するからです。編集した質問にはもう問題はありません。 – rozina

+0

ええ、これは誤りでした。ありがとう! –

0

あなたは、ベクターを使用しようとしました::割り当てますか?

m.assign(newSize, m_buffer); 
+0

これはうまくいきません。 –

関連する問題