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

1 błąd w kodzie - w którym miejscu?

0 głosów
150 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez fruczka Użytkownik (570 p.)

Witam. Posiadam następujący kod:
 

#include<iostream>
using namespace std;
#include<string>

struct Roslinka
{
string nazwa;
string specjalnosc;
int hp;
Roslinka *nastepny; // wskaznik na nastepny element na liscie

Roslinka() // konstruktor - wywolywany przy tworzeniu obiektu
{
// wczytujemy dane
cout << "Podaj nazwe roslinki: ";
cin >> nazwa;
cout << "Podaj specjalnosc: ";
cin >> specjalnosc;
cout << "Podaj hp: ";
cin >> hp;
// wskazniki ustawiamy na NULL
nastepny = NULL;
}

void wypisz()
{
cout << "Nazwa: " << nazwa << "\tSpecjalnosc " << specjalnosc << "\tHp: " << hp << endl;
}
};

void dodaj_roslinke(Roslinka **korzen)
{
Roslinka *nowa = new Roslinka;
Roslinka *pomoc = (*korzen), *pomoc1 = NULL;

while (pomoc != NULL && (pomoc->specjalnosc).compare(nowa->specjalnosc) == -1)
{
pomoc1 = pomoc;
pomoc = pomoc->nastepny;
}

if (pomoc != NULL && (pomoc->specjalnosc).compare(nowa->specjalnosc) == 0)
{
cout << "Roslinka " << nowa->specjalnosc << " juz istnieje w zbiorze roslin\n";
delete nowa;
}
else if ((*korzen) == NULL || (pomoc == (*korzen) && (pomoc->specjalnosc).compare(nowa->specjalnosc) == 1))
{
nowa->nastepny = (*korzen);
(*korzen) = nowa;
}
else
{
pomoc1->nastepny = nowa;
nowa->nastepny = pomoc;
}
}

void wyszukaj_roslinke(Roslinka *korzen, string a)
{
while(korzen != NULL && (korzen->specjalnosc).compare(a) != 0)
korzen = korzen->nastepny;

if (korzen == NULL)
cout << "Nie ma roslinki " << a << endl;
else
korzen->wypisz();
}

void wypisz_roslinozbior(Roslinka *korzen)
{
cout << "Zawartosc Roslino-zbioru:\n";

while(korzen != NULL)
{
korzen->wypisz();
korzen = korzen->nastepny;
}
}

bool usun_roslinke(Roslinka **korzen, string a)
{
if ((*korzen) == NULL)
return false;
Roslinka *pomoc = (*korzen), *pomoc1 = NULL;

while(pomoc != NULL && (pomoc->specjalnosc).compare(a) != 0)
{
pomoc1 = pomoc;
pomoc = pomoc->nastepny;
}

if (pomoc == NULL)
return false;
else if (pomoc == (*korzen))
{
(*korzen) = (*korzen)->nastepny;
delete pomoc;
}
else
{
pomoc1->nastepny = pomoc->nastepny;
delete pomoc;
}
return true;
}

int main()
{
char instrukcja;
string specjalnosc;
Roslinka *korzen = NULL;
cout << "MENU - mozliwe operacje na roslinozbiorze\n"
<< "d - dodanie roslinki\n"
<< "s - wyszukanie roslinki\n"
<< "w - wypisanie wszystkich roslinek\n"
<< "u - usuniecie roslinki\n"
<< "ESC - koniec programu\n";

while (cin >> instrukcja)
{
switch (instrukcja)
{
case 'd':
dodaj_roslinke(&korzen);
break;
case 's':
cout << "Podaj specjalnosc: ";
cin >> specjalnosc;
wyszukaj_roslinke(korzen, Roslinka);
break;
case 'w':
wypisz_roslinozbior(korzen);
break;
case 'u':
cout << "Podaj specjalnosc: ";
cin >> specjalnosc;
if (!usun_roslinke(&korzen, specjalnosc))
cout << "Nie odnaleziono roslinki z podana specjalnoscia." << endl;
else
cout << "Roslinka z podana specjalnoscia zostala usunieta." << endl;
break;
default:
cout << "Musisz wybrac jedna z opcji: d - dodawanie, s - wyszukiwanie, w - wypisanie zawartosci lub u - usuwanie\n";
break;
}
}

return 0;
}

Kompilując go... pokazuje błąd expected primary-expression before ')' token. Wyskakuje on przy linijce:
 

wyszukaj_roslinke(korzen, Roslinka);

 

komentarz 21 czerwca 2018 przez criss Mędrzec (172,570 p.)
Brakuje ci nawiasu (i średnika) kończącego definicje klasy.
komentarz 21 czerwca 2018 przez fruczka Użytkownik (570 p.)

@Criss, dzięki bardzo, już zauważyłem błąd, po prostu w linijce z wyszukaniem roślinki, było  wyszukaj_roslinke(korzen, Roslinka); a powinno być: wyszukaj_roslinke(korzen, specjalnosc);

Już wszystko jasne :)

1 odpowiedź

+1 głos
odpowiedź 21 czerwca 2018 przez Kacper Sas Dyskutant (8,460 p.)

Przekazujesz jako argument typ danych. W dodatku:

void wyszukaj_roslinke(Roslinka *korzen, string a)
{
    while(korzen != NULL && (korzen->specjalnosc).compare(a) != 0)
        korzen = korzen->nastepny;

    if (korzen == NULL)
        cout << "Nie ma roslinki " << a << endl;
    else
        korzen->wypisz();
}

przyjmujesz string 'a' na tym miejscu. Chyba nie do końca Ci o to chodziło :x

Podobne pytania

–1 głos
1 odpowiedź 192 wizyt
pytanie zadane 22 grudnia 2016 w C i C++ przez antekwi546 Użytkownik (510 p.)
0 głosów
0 odpowiedzi 1,188 wizyt
pytanie zadane 23 listopada 2019 w C i C++ przez BezBarwny Użytkownik (700 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...