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

[C++] void in void

42 Warsaw Coding Academy
0 głosów
246 wizyt
pytanie zadane 10 marca 2022 w C i C++ przez Krzysztofs1234 Użytkownik (890 p.)

Dzień dobry,

napisałem funkcję sortowania szybkiego i chciałbym dodać możliwość kolejności sortowania. Zdaje się, że deklaracje są w porządku, ale "error: a function-definition is not allowed here before ' {' token" chyba mówi, że tak się w ogóle nie da. Pojawiło się również "error: expected '}' at end of input".

Jak mógłbym to poprawnie zadeklarować?

Proszę o pomoc.

void quick(int *tab, unsigned int l, unsigned int r)
{
    void quick_r(int *tab, unsigned int l, unsigned int r)
    {
        int i=l, j=r, p=tab[(l+r)/2];
        while(i<j)
        {
            while(tab[i]<p) i++;
            while(tab[j]>p) j--;
            if(i<=j)
            {
                swap(*(tab+i), *(tab+j));
                i++;
                j--;
            }
        }
        if(l<j) quick(tab, l, j);
        if(r>i) quick(tab, i, r);
    }

    void quick_m(int *tab, unsigned int l, unsigned int r)
    {
        int i=l, j=r, p=tab[(l+r)/2];
        while(i<j)
        {
            while(tab[i]>p) i++;
            while(tab[j]<p) j--;
            if(i<=j)
            {
                swap(*(tab+i), *(tab+j));
                i++;
                j--;
            }
        }
        if(l<j) quick(tab, l, j);
        if(r>i) quick(tab, i, r);
    }

    char m;
    cout << "Wybierz tryb sortowania (0 - rosnacy, 1 - malejacy): "; cin >> m;
    if (m=='0') quick_r(tab, l, r);
    if (m=='1') quick_m(tab, l, r);
}

1 odpowiedź

+2 głosów
odpowiedź 10 marca 2022 przez adrian17 Mentor (353,220 p.)

Po prostu nie deklaruj funkcji w funkcji, tylko wszystkie "na zewnątrz".

void quick_r(int *tab, unsigned int l, unsigned int r)
{
...
}
void quick_m(int *tab, unsigned int l, unsigned int r)
{
...
}
void quick(int *tab, unsigned int l, unsigned int r)
{
...
}

 

komentarz 10 marca 2022 przez Krzysztofs1234 Użytkownik (890 p.)

I teraz zero błędów. Dziękuję. Poprawiłem jeszcze odpowiednie _r i _m przy instrukcjach warunkowych, bo nie zauważyłem, że źle by rekurencja działała.

void quick(int *tab, unsigned int l, unsigned int r)
{
    char m;
    cout << "Wybierz tryb sortowania (0 - rosnacy, 1 - malejacy): "; cin >> m;
    if (m=='0') quick_r(tab, l, r);
    if (m=='1') quick_m(tab, l, r);
}

void quick_r(int *tab, unsigned int l, unsigned int r)
    {
        unsigned int i=l, j=r;
        int p=tab[(l+r)/2];
        while(i<j)
        {
            while(tab[i]<p) i++;
            while(tab[j]>p) j--;
            if(i<=j)
            {
                swap(*(tab+i), *(tab+j));
                i++;
                j--;
            }
        }
        if(l<j) quick_r(tab, l, j);
        if(r>i) quick_r(tab, i, r);
    }

void quick_m(int *tab, unsigned int l, unsigned int r)
{
    unsigned int i=l, j=r;
    int p=tab[(l+r)/2];
    while(i<j)
    {
        while(tab[i]>p) i++;
        while(tab[j]<p) j--;
        if(i<=j)
        {
            swap(*(tab+i), *(tab+j));
            i++;
            j--;
        }
    }
    if(l<j) quick_m(tab, l, j);
    if(r>i) quick_m(tab, i, r);
}

Tak czy owak nie da się zrobić tak w taki sposób, w jaki ja chciałem na początku? Wyglądałoby to trochę bardziej elegancko, byłoby bardziej uporządkowane.

komentarz 10 marca 2022 przez NewEraOfPeace Gaduła (4,790 p.)
Możesz użyć lambd.

Podobne pytania

+1 głos
1 odpowiedź 338 wizyt
pytanie zadane 20 stycznia 2022 w C i C++ przez Krzysztofs1234 Użytkownik (890 p.)
0 głosów
4 odpowiedzi 784 wizyt
pytanie zadane 4 kwietnia 2018 w C i C++ przez urbix01 Gaduła (3,290 p.)
0 głosów
3 odpowiedzi 3,672 wizyt
pytanie zadane 2 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 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
...