• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wskaźnik do struktury w strukturze

Object Storage Arubacloud
0 głosów
127 wizyt
pytanie zadane 23 listopada 2020 w C i C++ przez dnaiel Początkujący (400 p.)

Witam szanownych programujących,

jak w strukturze "person" stworzyć wskaźnik na strukturę "ship" oraz jak później dla każdej osoby przypisać wybrany statek?

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<string.h>

using namespace std;

struct person {
	int id;
	//wskaźnik na statek

};

struct statek {
	int waga;
	char ship_name[30];
};


int main() 
{
	statek statki[2];
	person osoba[4];

	statki[0].waga = 100;
	strcpy(statki[0].ship_name, "PotężnyStatek");

	statki[1].waga = 200;
	strcpy(statki[1].ship_name, "PotężniejszyStatek");

	for (int i = 0;i < 4;i++)
	{
		//przydzielanie danej strukturze osoba[i] konkretnego statku
	}


	//wypisywanie id danej osoby oraz odpowiedniej nazwy statku i jego wagi
	for (int i = 0;i < 2;i++)
		cout << osoba[i].id << " " << /*nazwa statku*/ << " " << /*waga statku*/<<endl;
}

 

2 odpowiedzi

+1 głos
odpowiedź 23 listopada 2020 przez Kabuuz Bywalec (2,820 p.)
wybrane 23 listopada 2020 przez dnaiel
 
Najlepsza
Możesz zrobić poprostu statek* nazwa; jest tylko taki problem że person jest napisane najpierw i program nie wie, że takie coś jak statek istnieje. Albo zamienisz te 2 struktury kolejnością w programie albo przed wcześniej poinformujesz że takie coś jak statek jest (class statek;)
komentarz 23 listopada 2020 przez dnaiel Początkujący (400 p.)

Zrobiłem tak jak poradziłeś, teraz tylko nie wiem jak zrobić coś takiego:
Chcę na przykład każdej osobie przypisać statek drugi (czyli ten z indeksem 1) czy dobrze to robię? Jeśli tak, to jak wtedy wypisać statek przypisany każdej osobie?

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<string.h>

using namespace std;

struct statek {
	int waga;
	char ship_name[30];
};

struct person {
	int id;
	statek* nazwa;

};


int main() 
{
	statek statki[2];
	person human[4];

	statki[0].waga = 100;
	strcpy(statki[0].ship_name, "PoteznyStatek");

	statki[1].waga = 200;
	strcpy(statki[1].ship_name, "PotezniejszyStatek");



	for (int i = 0;i < 4;i++)
	{
		cin >> human[i].id;
		human[i].nazwa = &statki[1];//problem mam tutaj
	}


	//wypisywanie id danej osoby (struktury human) oraz odpowiedniej nazwy statku i jego wagi
	for (int i = 0;i < 4;i++)
		cout << human[i].id << " " << *human[i].nazwa <<endl;//i tutaj
}

 

+2 głosów
odpowiedź 23 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Musisz poinformować program, że taka struktura zostanie zdefiniowana w innym miejscu w kodzie

struct statek;

struct person {
    int id;
    statek *wskaznik_na_statek;
};
 
struct statek {
    int waga;
    char ship_name[30];
};

Statek do wskaźnika przypisujesz tak samo jak każdy inny typ do pasującego wskaźnika

int liczba;
int *wskaznik = &liczba;

 

komentarz 23 listopada 2020 przez dnaiel Początkujący (400 p.)

Zrobiłem tak jak napisałeś tylko inna nazwa wskaźnika na statek

struct statek {
	int waga;
	char ship_name[30];
};

struct person {
	int id;
	statek *nazwa;

};

 

 

Powiedzmy że chciałbym każdej z czterech osób przypisać drugi statek (z indeksem 1),

czy taki zapis jest poprawny?

for (int i = 0;i < 4;i++)
{
       cin>>human[i].id;
       human[i].nazwa = &statki[1];
}

Jak potem wypisać przypisany statek dla danej osoby?

Myślałem o czymś takim ale nie działa :/

for (int i = 0;i < 4;i++)
		cout << human[i].id << " " << *human[i].nazwa <<endl;

 

komentarz 23 listopada 2020 przez tangarr Mędrzec (154,860 p.)
Z innej beczki: Dlaczego używasz napisów w stylu C?
komentarz 23 listopada 2020 przez tangarr Mędrzec (154,860 p.)

(Przez przypadek umieściłem ten komentarz pod złą odpowiedzią)

Musisz przeciążyć operator << dla strumienia wyjściowego ostream

np. tak

ostream &operator<< (ostream &out, const statek &s) {
    out << "Statek: " << s.ship_name << " (waga: " << s.waga << ")";
    return out;
}

Podobne pytania

0 głosów
1 odpowiedź 572 wizyt
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 30 grudnia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
3 odpowiedzi 235 wizyt
pytanie zadane 24 października 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...