Vector w strukturach, jak umieścić dane w argumentach struktury.

0

Witam, niestety nie udało mi się znaleźć na tytułowe pytanie jasnej odpowiedz w sieci więc zwracam się tutaj, proszę o pomoc i wyrozumiałość ponieważ dopiero się uczę.
Tak wiem słaby itd. (Uprzedzam niektóre komentarze )

#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
class person {

private:

	typedef struct {
		int id;
		char imie[20];
		char nazwisko[20];
		int wiek;
	} tosoba;
	int size;
	vector<tosoba>osoba;

public:

	void add_person(int size) {

		


		for (int i = 0; i < size; i++)
		{
			cout << "Podaj ID: ";                                     
			int id;
			cin >> id;
			osoba.id.push_back(id);                                 //tutaj mam problem
			cout << "Podaj imie: ";
			int imie;
			cin >> imie;
			osoba.imie.push_back(imie);
			cout << "Podaj nazwisko: ";
			int nazwisko;
			cin >> nazwisko;
			osoba.nazwisko.push_back(nazwisko);
			cout << "Podaj wiek: ";
			int wiek;
			cin >> wiek;
			osoba.push_back(wiek);

		}


	}

	void show_person(int size)
	{
		for (int i = 0; i < size; i++)
		{

			cout << tab[i].id << endl;

			cout << tab[i].imie << endl;

			cout << tab[i].nazwisko << endl;

			cout << tab[i].wiek << endl;

		}


	}


};




int main()
{
	int size;
	cout << "Podaj rozmiar tablicy:" << endl;
	cin >> size;

	person a;
	a.size = size;
	a.add_person(size);
	a.show_person(size);

	return 0;
}

0

Twój kod używa std::vector<tosoba> jakby to była struktura list a nie lista struktur. Musisz najpierw stworzyć całą strukturę, a dopiero potem możesz ją wsadzić do wektora.

0

do vector<tosoba> osoba możesz wrzucać push_backiem tylko całe struktury tosoba, nie możesz wrzucać samych argumentów struktury

...
tosoba temp;
cout << "Podaj ID: ";                                     
int id;
cin >> id;
temp.id = id;
cout << "Podaj imie: ";
char imie[32];
cin >> imie;
strcpy(temp.imie, imie);
cout << "Podaj nazwisko: ";
char nazwisko[32];
cin >> nazwisko;
strcpy(temp.nazwisko, nazwisko);
cout << "Podaj wiek: ";
int wiek;
cin >> wiek;
temp.wiek = wiek;
osoba.push_back(temp);
...
0

@Pabloo111:
Skoro klasa nazywa się person to powinna reprezentować dokładnie jedną osobę. No chyba, że piszesz program dla służb specjalnych, wtedy kilka tożsamości jest ok ;)
Jaki jest cel istnienia struktury tosoba? I po co ten typedef?

0
tajny_agent napisał(a):

@Pabloo111:
Skoro klasa nazywa się person to powinna reprezentować dokładnie jedną osobę. No chyba, że piszesz program dla służb specjalnych, wtedy kilka tożsamości jest ok ;)
Jaki jest cel istnienia struktury tosoba? I po co ten typedef?

Czysto teoretyczny, narzucony przez treść zadania, w treści zadania jest tak opisana struktura a nie chce zmieniać żeby później nie było że zmieniłem sobie zadanie i 0 punktów.

0
hauleth napisał(a):

Twój kod używa std::vector<tosoba> jakby to była struktura list a nie lista struktur. Musisz najpierw stworzyć całą strukturę, a dopiero potem możesz ją wsadzić do wektora.

A więc pierwsze przekazać do obiektu wartość size która będzie definiowała wielkość vektor`a a następnie przez inkrementacje przypisać wartości poszczególnych argumentów struktury, dobrze rozumiem ?

Edit: Dobra, jednak zrobię to w ten sposób co kolega @au7h napisał, dziękuje za pomoc. : )

0
au7h napisał(a):

do vector<tosoba> osoba możesz wrzucać push_backiem tylko całe struktury tosoba, nie możesz wrzucać samych argumentów struktury

...
tosoba temp;
cout << "Podaj ID: ";                                     
int id;
cin >> id;
temp.id = id;
cout << "Podaj imie: ";
char imie[32];
cin >> imie;
strcpy(temp.imie, imie);
cout << "Podaj nazwisko: ";
char nazwisko[32];
cin >> nazwisko;
strcpy(temp.nazwisko, nazwisko);
cout << "Podaj wiek: ";
int wiek;
cin >> wiek;
temp.wiek = wiek;
osoba.push_back(temp);
...

Ok o to mi chodziło, dzięki wielki : )

0

Tak wiem słaby itd. (Uprzedzam niektóre komentarze )

Nie chodzi o stwierdzenie, że jesteś słaby (każdy kiedyś był newbie), tylko o wymienienie błędów jakie popełniasz, żebyś mógł je naprawić i czegoś się nauczyć, wiec niczego nie "uprzedzasz".

  1. nie mieszaj polskiego i angielskiego w kodzie - najlepiej pisz tylko po angielsku
  2. jak korzystasz z C++ to czerp z niego garściami (unikaj kodu typowego dla C)
class person {
public:
    int id;
    std::string firstName;
    std::string lastName;
    int age;

    std::istream& interactiveRead(std::istream& in, std::ostream& out)
    {
        out<< "Podaj ID: ";                                     
        in >> id;
        out << "Podaj imie: ";
        in >> fisrtName;
        out << "Podaj nazwisko: ";
        in >> lastName;
        out << "Podaj wiek: ";
        return in >> age;
    }

    std::ostream& printTo(std::ostream &) {
        
    }
};

class human_resources
{
public:
     human_resources() {}

     void add(const person& p) {
          people.push_back(p);
     }

     void addFromConsole() {
           person p;
           if (p.interactiveRead(std::cin, std::cout))
               add(p);
     }

private:
     std::vector<person> people;
};
0
MarekR22 napisał(a):

Tak wiem słaby itd. (Uprzedzam niektóre komentarze )

Nie chodzi o stwierdzenie, że jesteś słaby (każdy kiedyś był newbie), tylko o wymienienie błędów jakie popełniasz, żebyś mógł je naprawić i czegoś się nauczyć, wiec niczego nie "uprzedzasz".

  1. nie mieszaj polskiego i angielskiego w kodzie - najlepiej pisz tylko po angielsku
  2. jak korzystasz z C++ to czerp z niego garściami (unikaj kodu typowego dla C)
class person {
public:
    int id;
    std::string firstName;
    std::string lastName;
    int age;

    std::istream& interactiveRead(std::istream& in, std::ostream& out)
    {
        out<< "Podaj ID: ";                                     
        in >> id;
        out << "Podaj imie: ";
        in >> fisrtName;
        out << "Podaj nazwisko: ";
        in >> lastName;
        out << "Podaj wiek: ";
        return in >> age;
    }

    std::ostream& printTo(std::ostream &) {
        
    }
};

class human_resources
{
public:
     human_resources() {}

     void add(const person& p) {
          people.push_back(p);
     }

     void addFromConsole() {
           person p;
           if (p.interactiveRead(std::cin, std::cout))
               add(p);
     }

private:
     std::vector<person> people;
};

Ad1. Rozumiem tą zasadę ale nazwy które były w strukturze jak już wyżej napisałem były mi narzucone przez zadanie.
Ad2. Sposób który pisze nauczyłem się na studiach ale pewnie chciałbym się nauczyć pisać tak jak mówisz, dzięki za kod na pewno go przeanalizuje i douczę się tego co tam zaimplementowałeś .

Edit: z tym słąby chodziło mi o określenia tego typu, czyli ogólne nic nie wnoszące konkretnie. Niestety często ludzi piszą takie komentarze po których nawet nie dowiem się co jest źle

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