Dzień dobry,
Jestem laikiem programowania, właśnie stworzyłem swoją pierwszą jednokierunkową listę. Program działa, jednakże pisałem go w Code::Blocks, zauważyłem, że program pomija niektóre błędy i zaznacza je jako warningi. Staram się naprawić te błędy, gdyż np. Visual Studio, traktuje je bardziej poważnie, a także dlatego, że program oddaje na ocenę na studia, więc zależy mi na jak najwyższej, a wszystkie błędy "gramatyczne" w kodzie obniżają mi ocenę. Problem mój wygląda następująco: wysyłam zadeklarowany w main'ie wskaźnik do pierwszego elementu struktury do funkcji ("f"). Warning tego błędu brzmi następująco: "warning: passing argument 1 of 'dodaj; from incompatible pointer type [enabled by default]" oraz "note: expected 'struct osoba*' but argument is of type 'struct osoba **' ". Jak widać po zamieszczonym przeze mnie kodzie poniżej przesyłałam wskaźnik "f" (wskaźnik do pierwszego elementu) ze znakiem ampersand (z tego co wiem robi się to bez tego znaku, jednak program przestaje działać przy wywołaniu funkcji bez niego). Próbowałem naprawić błędy, jednakże za każdym razem dostaję ich coraz więcej, dlatego postanowiłem zasięgnąć pomocy i doświadczenia osób bardziej doświadczonych. Pozdrawiam i dziękuję za pomoc.
Poniżej zamieszczam kody źródłowe istotniejszych części programu (jako, że jest on duży a problem dotyczy, z tego co mi się wydaje jedynie wywołanie funkcji i przesłania wskaźnika "f", ew. alokacji pamięci wewnątrz tej funkcji):
//definicja struktury
typedef struct lista
{
int wiek; // informacja o wieku
char imie[50];
char nazwisko[50];
struct lista *polacz; // samoodwolujaca sie struktura
}osoba; // pojedynczy wezel listy
//definicja funkcji "dodaj", która dodaje nowy element do listy
void dodaj(osoba *f)
{
osoba *nowy = (osoba*)malloc(sizeof(osoba));
printf("Podaj imie osoby.\n");
scanf("%s", &nowy -> imie);
printf("Podaj nazwisko osoby.\n");
scanf("%s", &nowy -> nazwisko);
printf("Podaj wiek osoby.\n");
scanf("%d", &nowy -> wiek);
nowy -> polacz = NULL;
while(f -> polacz != NULL)
{
f = f -> polacz;
}
f -> polacz = nowy;
}
//deklaracja wskaźnika "f" (w main'ie)
osoba *f;
//wywołanie funkcji "dodaj"
dodaj(&f);