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

[C++] void in void

0 głosów
90 wizyt
pytanie zadane 10 marca w C i C++ przez Krzysztofs1234 Użytkownik (780 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 przez adrian17 Ekspert (323,380 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 przez Krzysztofs1234 Użytkownik (780 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 przez NewEraOfPeace Gaduła (4,790 p.)
Możesz użyć lambd.

Podobne pytania

+1 głos
1 odpowiedź 110 wizyt
pytanie zadane 20 stycznia w C i C++ przez Krzysztofs1234 Użytkownik (780 p.)
0 głosów
4 odpowiedzi 457 wizyt
pytanie zadane 4 kwietnia 2018 w C i C++ przez urbix01 Gaduła (3,290 p.)
0 głosów
3 odpowiedzi 2,225 wizyt
pytanie zadane 2 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,850 p.)

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...