Problem z zagnieżdżaniem struktur

0

Hej,
Mój problem polega na odwołaniu się do zagnieżdżonej struktury DataUrodzenia w funkcji DodajOsobe

Przy próbie przypisania czegoś w taki sposób : tmp->Data.Dzien=PodanyDzien; wyskakuje mi błąd: error: field 'Data' has incomplete type 'DataUrodzenia'

Znalazłby się śmiałek który pokazałby mi co robię źle ?

 #include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

struct Osoba
{
    int ID;
    string Imie;
    string Nazwisko;
    struct DataUrodzenia Data;
    string Adres;      // Ulica + nr.domu
    string Miasto;
    string InneDane;
    Osoba *next;
    Osoba *prev;
};
struct DataUrodzenia
{
    int Dzien;
    int Miesiac;
    int Rok;
}Data;
struct Osoba *tmp; // Wskaźnik tymczasowy
struct Osoba *head; // Pierwszy element listy
struct Osoba *tail; // Ostatni element listy
void menu();
void DodajOsobe(struct Osoba *tmp,struct Osoba *head,struct Osoba *tail,string PodaneImie,string PodaneNazwisko,string PodanyAdres,string PodaneMiasto,string PodaneInneDane,int PodanyDzien,int PodanyMiesiac,int PodanyRok);

int main()
{
    string PodaneImie,PodaneNazwisko,PodanyAdres,PodaneMiasto,PodaneInneDane;
    int wybor,PodanyRok,PodanyMiesiac,PodanyDzien;
    while(1)
    {
        menu();
        cin>>wybor;
        switch(wybor)
            case(1):
                DodajOsobe(tmp,head,tail,PodaneImie,PodaneNazwisko,PodanyAdres,PodaneMiasto,PodaneInneDane,PodanyDzien,PodanyMiesiac,PodanyRok);

    }
}
void menu()
{
    cout<<"1) Dodaj nowa osobe"<<endl;
    cout<<"2) Usun osobe"<<endl;
    cout<<"3) Wyszukaj osobe"<<endl;
    cout<<"4) Wyswietl baze osob wg nazwisk"<<endl;
    cout<<"5) Modyfikuj osobe po ID"<<endl;
    cout<<"6) Zapisz do pliku"<<endl;
    cout<<"7) Odczytaj z pliku"<<endl;
    cout<<"8) Koniec pracy"<<endl;
}
void DodajOsobe(struct Osoba *tmp,struct Osoba *head,struct Osoba *tail,string PodaneImie,string PodaneNazwisko,string PodanyAdres,string PodaneMiasto,string PodaneInneDane,int PodanyDzien,int PodanyMiesiac,int PodanyRok)
{
    tmp=new Osoba;
    tmp->Imie=PodaneImie;
    tmp->Nazwisko=PodaneNazwisko;
    tmp->Data.Dzien=PodanyDzien;
}

0

Próbujesz stworzyć obiekt struktury która nie jest jeszcze stworzona/zdefiniowana...i o tym ci mówi kompilator...

0

Przenieś całą deklarację structury

 struct DataUrodzenia
...

nad strukturę Osoba, ponieważ używasz typu, który nie jest jeszcze zadeklarowany. Usuń też to

}Data;

Po jakiego Ci tam to/ta Data?
Możesz też dać na samym początku po includach samą pustą deklarację:

 struct DataUrodzenia;

aby kompilator wiedział, że coś takiego jest.

0

Masz z tym problem, bo kompilator nie widzi struct DataUrodzenia. Wystarczy to przenieść nad struct Osoba, ale jak piszesz w C++ to pisz w nim. Doczytaj jak się bawić strukturami w tym języku bo moim zdaniem robisz to źle.

0

Dzięki bardzo. Głupi błąd, że aż mi wstyd.

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