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

Struktura wewnątrz struktury

Object Storage Arubacloud
+1 głos
647 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)
struct X
{
	struct y
	{
          int a;
	};
	struct z
	{
          int b;
	};
};

Cześć mam pytanie dotyczące struktur. Czy po stworzeniu struktury X, można jakoś zapisać dane do zmiennych a i b w wewnętrznych strukturach?

Dokładniej, chodzi mi o to, że gdyby int a; i int b; były bezpośrednio zapisane w X, to można zapisywać do nich dane w ten sposób: 

X k; k.a = 5; k.b = 10;

A jak to jest z zapisem danych do zmiennych wewnątrz struktur wewnątrz struktury przez samą zmienną X k;? Jest to wgl możliwe bez osobnego tworzenia zmiennych X::y i X::z? 

2 odpowiedzi

+1 głos
odpowiedź 8 grudnia 2018 przez mokrowski Mędrzec (155,460 p.)
wybrane 8 grudnia 2018 przez MAXIM7
 
Najlepsza

Pytanie podstawowe to czy potrafisz powiedzieć z czym masz do czynienia? To deklaracja klasy czy jej definicja? Tu na razie widać ze masz coś takiego:

Deklarację struktury X zawierającej dwie deklaracje struktur wewnętrznych y i z.

Jak chcesz teraz z takiej definicji 2 struktur wewnętrznych mieć 2 atrybuty, to je zdefiniuj. Wtedy będziesz je mógł inicjować.

#include <iostream>

struct X
{
    struct y
    {
          int a;
    };
    struct z
    {
          int b;
    };

    struct y m1;
    struct z m2;
};

int main() {
    // a = 12, b = 33
    X x{{12}, {33}};

    std::cout << "x.m1.a == " << x.m1.a << "\tx.m2.b == " << x.m2.b << '\n';
}

Jeśli jednak nie chcesz tak, to widać chcesz mieć "wyciągnięte" typy wewnętrzne. A to proszę...

#include <iostream>

struct X
{
    struct y
    {
          int a;
    };
    struct z
    {
          int b;
    };
};

int main() {
    // a = 12, b = 33
    auto obj_y = X::y{12};
    auto obj_z = X::z{33};
    std::cout << "obj_y.a == " << obj_y.a << "\tobj_z.b == " << obj_z.b << '\n';
}

Tu masz po prostu "zbitkę typów" pod nazwą X.

komentarz 8 grudnia 2018 przez MAXIM7 Obywatel (1,990 p.)
Tak, to była definicja. ;) Dokładnie, chodziło mi o ten pierwszy sposób, dzięki. ;)
+1 głos
odpowiedź 8 grudnia 2018 przez RafalS VIP (122,820 p.)

Póki co to jedynie zdefiniowałeś typy y i z jako struktury wewnętrzne struktury X. Żeby odwoływać się do pól potrzebujesz instancji tych struktur:

struct X {
	struct y {
		int a;
	};
	y y_;
	struct z {
		int b;
	};
	z z_;
};

int main(int argc, char** argv) {
	X x;
	x.y_.a = 10;
}

 

Podobne pytania

0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 11 października 2016 w C i C++ przez Jedyn Obywatel (1,200 p.)
0 głosów
2 odpowiedzi 324 wizyt
pytanie zadane 23 czerwca 2021 w C i C++ przez Eriss69 Gaduła (4,470 p.)
0 głosów
0 odpowiedzi 272 wizyt
pytanie zadane 15 stycznia 2021 w C i C++ przez janusz_cpp Nowicjusz (120 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 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!

...