Uso di vector in una member function

di il
3 risposte

Uso di vector in una member function

Ciao a tutti,
sto imparando ad usare il c++ da poco e, in particolare vorrei imparare ad usare la classe vector. Ecco il mio problema: ho definito una classe pt2d che rappresenta le coordinate di un punto in due dimensioni; questo è pt2d.h:

class pt2d {
private:
	double x;
	double y;
public:
//costruttore
	pt2d(double r=0., double s=0.) {
		x=r; y=s;
	}
	void move(double,double);
	void move(pt2d);
	void setAbscissa(double);
	void setOrdinate(double);
	void draw() const;
	double getAbscissa() const;
	double getOrdinate() const;
};
Ho poi creato una classe segment che rappresenta il segmento che unisce due punti; questo è segment.h:

#include "pt2d.h"
#include<vector>
class segment
{
    public:
//Costruttore
        segment(pt2d v0, pt2d v1);
        void draw() const;
        double const slope() const;
        pt2d get_vertex1() const;
    private:
		std::vector<pt2d> vertices;
};
e questo è segment.cpp:

#include "segment.h"
#include<iostream>
#include<vector>
using namespace std;
segment::segment(pt2d v0, pt2d v1)
{
	vector<pt2d> vertices;
   vertices.push_back(v0);
  vertices.push_back(v1);
}
void segment::draw() const {
	cout<< "Gli estremi di questo segmento sono:"<<std::endl;
	for(int i=0; i<vertices.size(); i++)
    vertices.at(i).draw();
    cout << endl;
}

pt2d segment::get_vertex1() const {
    pt2d p1=vertices[0];
    return p1;
}

double const segment::slope() const {

   double m=(vertices[1].getAbscissa()-vertices[0].getAbscissa())/
           (vertices[1].getOrdinate()-vertices[0].getOrdinate());
        return m;
}
e questo invece è il main:

#include <iostream>
#include <fstream>
#include <math.h>
//#include <vector>
#include "segment.h"
using namespace std;


void controlla_punto(segment& se, pt2d& pu);

int main()
{
//primo punto base
pt2d a(0,0);
//secondo punto base
pt2d b(4,4);
//punto con ordinata incognita
pt2d z(2,3.5);
cout << "point a has coordinates: ";
a.draw();
cout << "point b has coordinates: ";
b.draw();
cout << "point z has initial coordinates: ";
z.draw();
ofstream punti("punti.dat", ios_base::out);
punti.setf(ios_base::fixed, ios_base::floatfield);
punti.precision(5);
segment stecchino (a,b);
stecchino.draw();
stecchino.slope();
return 0;
}
Riesco a compilare senza errori ma quando poi eseguo ottengo un bel segmentation fault dopo la scritta a video "Gli estremi di questo segmento sono:". Sembra che la funzione membro segment::draw() non ha accesso agli elementi del vector<pt2d> vertices, nella definizione della classe segment, ma non riesco proprio a capire il perché .
Grazie a tutti per l'aiuto.

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte