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.