Witam, jestem w trakcie pisania prostego programu w c++ i mam problem dotyczący przekazywania listy struktur poprzez referencje (bo to chyba jest jedyny, przynajmniej mi znany sposób). Otóż chodzi mi o program zawarty w 3 plikach (nagłówkowy, główny i z kodem). Ma on za zadanie działać na osobach (taka mała baza danych). No i problem zaczyna się już w przekazaniu listy z osobami z pliku głównego, poprzez plik nagłówkowy do pliku źródłowego. Gdy pominę zapis nagłówka w pliku nagłówkowym, wszystko jest ok, poza tym że nie ma komunikacji, jednakże jak wpisze dany nagłówek do pliku nagłówkowego wyskakują błędy. Najlepiej jeśli pokażę ten problem:
plik główny (main.cpp):
#include<iostream>
//#include<list>
#include"osoby.h"
using namespace std;
int main()
{
list<person> lista_osob;
int menu;
cin >> menu;
switch (menu)
{
case 1:
{
dodaj_osobe(lista_osob);
}
}
system("pause");
}
plik nagłówkowy (zadanie.h):
#ifndef OSOBY_H
#define OSOBY_H
#include<list>
struct person
{
char imie[20];
char nazwisko[20];
int wiek;
double waga;
int wzrost;
};
void podaj_dane(person &nowa);
void dodaj_osobe(list<person> &lista_osob); //W Tym miejscu jest opisywany problem
#endif
plik źródłowy (zadanie.cpp):
#include<iostream>
//#include<list>
#include"osoby.h";
using namespace std;
person podaj_dane()
{
person nowa;
cout << "imie: ";
cin.getline(nowa.imie, 20);
cout << "nazwisko: ";
cin.getline(nowa.nazwisko, 20);
cout << "wiek: ";
cin >> nowa.wiek;
cout << "waga: ";
cin >> nowa.waga;
cout << "wzrost: ";
cin >> nowa.wzrost;
// cout << nowa.wzrost;
return nowa;
}
void wyswietl_dane(person &nowa)
{
cout << nowa.nazwisko << endl << nowa.wiek;
}
/*
void dodaj_osobe(list<person> &lista_osob)
{
person nowa;
podaj_dane(nowa);
lista_osob.push_front(2);
}
*/
void dodaj_osobe(list<person> &lista_osob)
{
lista_osob.push_back(podaj_dane());
}

błędy:
Error 11 error C2365: 'dodaj_osobe' : redefinition; previous definition was 'data variable'
Error 2 error C2275: 'person' : illegal use of this type as an expression
Error 8 error C2275: 'person' : illegal use of this type as an expression
Error 4 error C2182: 'dodaj_osobe' : illegal use of type 'void'
Error 10 error C2182: 'dodaj_osobe' : illegal use of type 'void'
Error 3 error C2065: 'lista_osob' : undeclared identifier
Error 9 error C2065: 'lista_osob' : undeclared identifier
Error 1 error C2065: 'list' : undeclared identifier
Error 7 error C2065: 'list' : undeclared identifier
Error 5 error C2064: term does not evaluate to a function taking 1 arguments
proszę o pomoc, ponieważ głowię się nad tym pozornie banalnym problemem już dobre pare godzin. Z góry dziękuję :)
Głównym problemem jest to że w pliku nagłówkowym (z rozszerzeniem .h) nie mogę wstawić takiego kodu:
void dodaj_osobe(list<person> &lista_osob);
bez tego nie mogę odwoływać się do listy umieszczonej w pliku głównym (main.cpp)