Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    24

    [c++] sostituire un dato in un vector di puntatori a oggetto

    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...

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    24
    classe dei punti...


    codice:
    #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

    codice:
    #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();
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.