Tworzenie kolekcji

0

Witam,
tworzę prosty program w którym mam kilka klas. Chciałbym żeby to działało mniej więcej tak: tworze obiekt, odpowiednią metodą wczytuje dane i przekazuje dane do mojej kolekcji. Chce mieć do wprowadzonych danych swobodny dostęp, wyświetlać je, usuwać itd. Próbowałem to zrobić na wektorach ale cały czas coś mi nie chce działać, tzn wiem co chyba mam źle ale nie wiem jak z tego wyjść.
Fragment kodu:
mam klase pracownik w której mam imie nazwisko itd.

 
int main()
{
vector <Pracownik> lista;

Pracownik nowy_pracownik;
nowy_pracownik.Wpisz();
lista.push_back(nowy_pracownik);
return 0;
}

powyższy kod sie pod koniec wywala, druga wersja nie działa poprawnie:

int main()
{
vector <const Pracownik*> lista;
Pracownik nowy_pracownik;
nowy_pracownik.Wpisz();
lista.push_back(&nowy_pracownik);
vector<const Pracownik*>::iterator itd=lista.begin();

cout << *itd;
return 0;
0

Pokaż najlepiej całą klasę Pracownik.

3

A nie moze cos innego tworzyc tych obiektow? Bo generalnie najprosciej bedzie jak zrobisz tak:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

class Person {
  friend istream& operator>>(istream& in, Person& p) { return in >> p.name; }
  friend ostream& operator<<(ostream& out, const Person& p) { return out << p.name; }

  string name;
};

int main(int argc, char *argv[]) {
  vector<Person> persons;
  copy(istream_iterator<Person>(cin), istream_iterator<Person>(), back_inserter(persons));
  copy(persons.begin(), persons.end(), ostream_iterator<Person>(cout, "\n"));
  return 0;
}

http://ideone.com/bqWklj

0

n0name_l rozumiem ze do wektora kopiujesz po prostu dane dane z wejscia?

A tutaj podaje większy fragment mojej klasy:

 
class Pracownik
{
	char *pszImie;
	char *pszNazwisko;
	Data DataUrodzenia;
	static int siLiczPrac;
public:

	Pracownik();
	Pracownik(const Pracownik &nowy_pracownik);
	~Pracownik();
	const char* Imie() const;
	const char* Nazwisko() const;
	void Imie(const char* nowe_imie);
	void Nazwisko(const char* nowe_nazwisko);
	void funDataUrodzenia(int nowy_dzien, int nowy_miesiac, int nowy_rok); 
	void Wypisz() const;
	void Wpisz();

Opisz metod w linku: http://www.wklejto.pl/201890

0

W gruncie rzeczy tak. W twoim przypadku wystarczy zamienic char* na string i dodac operatory, ktore beda wiedzialy jak pobrac dane z wejscia i wpisac w odpowiednie pola, reszta zajmie sie funkcja copy.

0

Ok. To myśle że problem teoretycznie rozwiązany ;) A tak jeszcze drążąc temat, to jest możliwość zrobienia tego w taki toporny sposób jak próbowałem?

1

No jest.

int main() {
  string tmpName;
  vector<Person> persons;
  while(cin >> tmpName) persons.push_back(Person(tmpName);
  for(const Person& p : persons) cout << p.getName();
  return 0;
}
2

Ten pierwszy toporny teoretycznie poprawny oprócz jednego.
W konstruktorze kopiującym musisz wpisać NULL w nazwisko i imie przed wywołaniem funkcji kopiujących, ponieważ oni najpierw zwalniają to co jest.
A ponieważ masz tam śmieci to zwalniany zostaje losowy fragment pamięci co w końcu doprowadza do wywalenia się.

0

Ok, rozumiem. Popracuje nad tym ;) Dzięki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1