Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

tworzenie tablicy wskaników do listy dwukierunkowej

Ostatnio zmodyfikowano 2018-06-10 19:55
Autor Wiadomość
bleda
Temat założony przez niniejszego użytkownika
tworzenie tablicy wskaników do listy dwukierunkowej
» 2018-06-05 16:54:54
Witam, jak napisałem w temacie chce stworzyć tablice wskazników do listy dwukierunkowej, zeby móc sortwać wskaźniki zamiast jej elementów. Niestety gdzieś wkrada się błąd. Wszystko się kompiluję, ale przy uruchomieniu dostaję nieskończoną pętla while(p) To jest mój kod:


C/C++
struct E1ist
{
    E1ist * next, * prev;
    int num;
   
};
struct Jumper
{
    E1ist * head, * tail;
    unsigned int count;
};

void wynik( E1ist **& wsk, Jumper & L, int b );
void l_init( Jumper & L );

int main()
{
    Jumper L;
    l_init( L );
    void funkcjarobiaca liste; // od  tego miejsca lista dwukierunkowa juz istnieje.
    int temp = 100;
   
    E1ist ** wsk = new E1ist *[ temp ];
    wynik( & wsk, L, temp );
}

void wynik( E1ist **& wsk, Jumper & L, int b )
{
    for( int i = 0; i < b; i++ ) { wsk[ i ] = new E1ist[ i ]; };
    int j = 0;
    E1ist * p;
    p = L.head;
    while( p )
   
    {
       
        wsk[ j ] = p;
        cout << wsk[ j ].num << endl;
        j++;
    }
}

void l_init( Jumper & L )
{
    L.head = L.tail = NULL;
    L.count = 0;
}
P-171392
pekfos
» 2018-06-05 18:46:58
Niestety gdzieś wkrada się błąd.
Zdradzę ci wielką tajemnicę świata.. Ctrl+F.
C/C++
while( p )

{
   
    wsk[ j ] = p;
    cout << wsk[ j ].num << endl;
    j++;
}
Wyszukaj sobie wszystkie wystąpienia p w tym kodzie. p powinno się jakoś zmieniać, żeby pętla nie była nieskończona. Trudno się oprzeć wrażeniu, że się jednak nie zmienia.
P-171396
bleda
Temat założony przez niniejszego użytkownika
» 2018-06-05 20:12:41
Ok, wiem, chyba znalazłem. Mea culpa.
C/C++
void wynik( E1ist **& wsk, Jumper & L, int b )
{ cout << "rozmariam rownania: " << b << endl;
   
   
    E1ist * p;
    p = L.head;
    for( int i = 0; i < b; i++ )
    {
        wsk[ i ] = new E1ist[ i ];
        cout << "TEST ";
       
        wsk[ i ] = p;
        p = p->next;
        cout <<( *( wsk + i ).num ); //
        cout <<( wsk + i ).num; // Kompilator wskazuje błąd na te wywolania.
        cout << wsk[ i ].num; //
       
    }
}

Jezeli teraz konstrukcja jest poprawna (zakladam, ze jest) dlaczego nie moge wywolac skladowej struktury?

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
0.cpp||In function 'void wynik(E1ist**&, Jumper&, int)':|
0.cpp|215|error: request for member 'num' in '(wsk + ((sizetype)(((unsigned int)i) * 4u)))', which is of non-class type 'E1ist**'|
0.cpp|216|error: request for member 'num' in '(wsk + ((sizetype)(((unsigned int)i) * 4u)))', which is of non-class type 'E1ist**'|
0.cpp|217|error: request for member 'num' in '*(wsk + ((sizetype)(((unsigned int)i) * 4u)))', which is of pointer type 'E1ist*' (maybe you meant to use '->' ?)|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
P-171397
pekfos
» 2018-06-05 20:50:55
Kolejność operatorów. Najbliższy poprawnego jest ostatni zapis i kompilator nawet zasugerował ci rozwiązanie.
maybe you meant to use '->' ?
P-171399
bleda
Temat założony przez niniejszego użytkownika
» 2018-06-10 19:55:28
Późno, ale szczerze. Dzięki pekfos
P-171470
« 1 »
  Strona 1 z 1