PDA

Visualizza la versione completa : [c++] sostituire un dato in un vector di puntatori a oggetto


Antò88
05-11-2011, 13:47
salve,

ho un vector di puntatori a un oggetto e voglio sostituire uno dei valori puntato dal vector
con un nuovo valore...

ho scritto questo codice (scusate se magari è poco "elegante" ma sono abbastanza inesperto)

float newX, newY;
cout << "quale punto vuoi spostare?";
cin >> x >> y;
cout << "scegli un nuovo punto ";
cin >> newX >> newY;
class_point* newP = new class_point(newX, newY);
/* --- leggo il vettore: se x = oldX AND y = oldY, allora oldX = newX e oldY = newY --- */
for (int var = 0; var < vett_punti.size(); ++var) {
class_point* p = vett_punti[var];
float oldX = p->getX();
float oldY = p->getY();
if (oldX == x && oldY == y) {
delete vett_punti[var];
vett_punti.erase(vett_punti.begin() + var);
vett_punti.insert(vett_punti.begin() + var, newP);
}
}

....mi cancella il contenuto però non mi inserisce il nuovo valore
inserito; se leggo il vettore mi da solo gli indirizzi di memoria, non i dati

qualcuno potrebbe spiegarmi?

grazie...

ramy89
05-11-2011, 13:59
Prima di tutto usa i tag per postare il codice.
Poi stai utilizzando i metodi della classe vett_punti che non hai postato.Posta anche il codice della classe.

Antò88
05-11-2011, 14:09
classe dei punti...





#include "class_point.h"
#include <cmath>
#include <vector>
#include <iostream>

using namespace std;

class_point::class_point(float ascissa, float ordinata)
{
x = ascissa;
y = ordinata;
}

class_point::~class_point()
{
}

float class_point::getX() {
return x;
}

float class_point::getY() {
return y;
}

void class_point::setCartesian(float newX, float newY) {
x = newX;
y = newY;
}

float class_point::dist(class_point& other) {
float x_1 = other.getX();
float y_1 = other.getY();
float delta_x = x_1 - x;
float delta_y = y_1 - y;
float d = sqrt((delta_x * delta_x) + (delta_y * delta_y));
return d;
}

classe dei cerchi




#ifndef CLASS_CIRCLE_H
#define CLASS_CIRCLE_H
#include "class_point.h"

class class_circle
{
public:
class_circle(float r, class_point* centro);

float stampaXcentro();
float stampaYcentro();

private:

class_point* center;
};

#endif // CLASS_CIRCLE_H


// metodi

#include "class_circle.h"

class_circle::class_circle(float raggio, class_point* centro)
{
radius = raggio;
center = centro;
}


float class_circle::stampaXcentro()
{
float x;
return x = center->getX();
}

float class_circle::stampaYcentro()
{
float y;
return y = center->getY();
}

Loading