Cały dzień już siedziałem nad tą jedną linijką kodu i do niczego nie doszedłem, prosiłbym o pomoc. Jak odczytać zmienne znajdujące się wewnątrz obiektów typu Punkt?
Mam dwie klasy, jedna "niższa" Punkt przechowuje jedną zmienną typu time_t i jedną tablicę dwuelementową typu double.
Druga klasa Zbior przechowuje wektor obiektów typu Punkt, posiada metodę dodaj_punkt, zwroc_ilosc_punktow oraz zapisz_punkty.
#include <iostream>
#include <stdio.h> // Pliki
#include <time.h> // czas
#include <vector> // Wektory
#include <boost/shared_ptr.hpp> // Wskaźniki zła
using namespace std;
using namespace boost;
class Punkt
{
public:
Punkt(double X, double Y, time_t czas);
Punkt();
~Punkt();
int ustaw_wspolzedne(double X, double Y);
int ustaw_czas(time_t czas);
void pobierz_wspolzedne(double *wspolzedne);
double zwroc_X();
double zwroc_Y();
time_t zwroc_czas();
private:
double wspolzedne [2]; // Współżędne konkretnego punku
time_t czas_pomiaru; // Czas w jakim został dokonany pomiar
};
class Przejazd : public Punkt
{
public:
vector <shared_ptr<Punkt> > punkty; // Wektor wskaźników na struktury
Przejazd();
~Przejazd();
int dodaj_punkt(double X, double Y, time_t czas);
int zwroc_ilosc_punktow();
int zapisz_punkty();
};
int Przejazd::dodaj_punkt(double X, double Y, time_t czas)
{
shared_ptr<Punkt> nowy(new Punkt(X, Y, czas) );
punkty.push_back(nowy); // Utwórz element na końcu wektora
return 0;
}
int Przejazd::zapisz_punkty()
{
while( !punkty.empty() ) // Dopóki nie jest vektor pusty
{
//~ cout << punkty.end()->zwroc_czas() <<endl; // Tak było by logicznie?
cout << (*punkty.end())->zwroc_czas() <<endl; // Tylko tak kompilator przyjmuje
punkty.pop_back();
}
}
int Przejazd::zwroc_ilosc_punktow ()
{
return punkty.size();
}
Podczas kompilacji nie dostaje nawet ostrzeżenia a gdy wchodzi do metody zapisz_punkty to:
err: /usr/include/boost/smart_ptr/shared_ptr.hpp:418: T* boost::shared_ptr< <template-parameter-1-1> >::operator->() const [with T = Punkt]: Assertion `px != 0' failed.
Czyli niezainicjowany wskaźnik?