In einem C++ Programm erkläre ich eine Variable e auf diese Weise:C++: Ändern eines Vektors von share_ptr Elemente
shared_ptr<c_t> e = shared_ptr<c_t> (new c_t);
Dann e initialisiert wird.
Später im Programm, möchte ich e, mit dieser Funktion, um die Größe:
e->change(4);
Wo die Klasse c_t und die Funktion c_t :: Änderung sind definiert als:
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;
};
};
Dieser Ansatz funktioniert jedoch nicht. Wenn ich einen Iterator verwende, um und zu lesen, bekomme ich, dass die Werte von und sind inf. Warum? Wie sollte ich e ändern?
Edit: zu lesen, tatsächlich zu skalieren, um die Werte von e, die Klasse c_t diese Funktion verwendet:
void scaling(double factor) {
for (auto it = m.begin(); it != m.end(); ++it) {
m *= factor;
};
};
Warum Sie 'double' mit' c_double' mischen? Sind sie vom selben Typ? Warum unterschiedliche Namen dann? – rozina
Entschuldigung, dies ist nur ein Dummy-Beispiel. Die realen Klassen sind komplexer. –
Auch was meinst du mit einem Iterator zum Lesen von e? Ist e in einem Container? Zeigen Sie uns den Code, wo Sie e lesen. ps: selbst wenn dies ein Dummy-Beispiel ist, mach es [complete and vertibarable] (http://stackoverflow.com/help/mcve) – rozina