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

Problem z powiększaniem zbioru obiektów

Ostatnio zmodyfikowano 2011-12-23 21:02
Autor Wiadomość
Dawidsoni
Temat założony przez niniejszego użytkownika
Problem z powiększaniem zbioru obiektów
» 2011-12-23 18:42:11
Witam. Często muszę powiększać zbiory obiektów, więc napisałem sobie funkcję szablonową, która wygląda tak:
C/C++
template < class typ >
void powiekszenie( typ * wsk_nazwa, int licznik, int o_ile ) {
    typ * wsk_kopia = new typ[ licznik ];
    for( int i = 0; i < licznik; i++ ) {
        wsk_kopia[ i ] = wsk_nazwa[ i ];
    }
    delete[] wsk_nazwa;
    wsk_nazwa = new typ[ licznik + o_ile ];
    for( int i = 0; i < licznik; i++ ) {
        wsk_nazwa[ i ] = wsk_kopia[ i ];
    }
    delete[] wsk_kopia;
}

Używam jej w ten sposób:
C/C++
if( licznik % 5 == 0 ) {
    powiekszenie( wsk, licznik, 5 );
}

Jeśli jest poniżej 5 obiektów wsk, to wszystko działa ok. Jeśli jest powyżej 5 obiektów to wszystko działa też dobrze (sama funkcja nie powoduje zacięcia programu). Kiedy natomiast napiszę po powiększeniu:
C/C++
wsk[ 6 ] = 1;

To program bardzo dziwnie reaguje. Czasem działa poprawnie, a czasem się zawiesza... To działa, tak jakby funkcja powiększająca czasem nie działała.

Jeśli zamiast używać funkcji szablonowej, piszę bezpośrednio kod dla typu int w miejscu po warunku if, to wszystko działa poprawnie.

Proszę o pomoc.
P-46158
pekfos
» 2011-12-23 19:21:38
przekaż wskaźnik przez referencje.
P-46159
Dawidsoni
Temat założony przez niniejszego użytkownika
» 2011-12-23 20:12:54
Tak?
powiekszenie( & sprajt, licznik, 5 );

Nie działa tak jak co...

Jeszcze 1 oprócz tego.
C/C++
String m;
m.SetText( "aa" );

Błąd: undefined reference to `_imp___ZN2sf7Unicode4TextC1EPKc'|
P-46161
pekfos
» 2011-12-23 20:17:49
Nie tak..

PS: co ty tam pchasz do tematu?
1 temat = 1 problem
P-46162
Dawidsoni
Temat założony przez niniejszego użytkownika
» 2011-12-23 20:29:46
To jak?

Dobra, założę potem nowy problem. Ale to dziwne, bo zawsze mi ta funkcja działała, a teraz jest błąd, jakbym czegoś nie zaimportował. (nic nie zmieniałem).
P-46164
pekfos
» 2011-12-23 20:34:15
To tak
void powiekszenie( typ *& wsk_nazwa, int licznik, int o_ile ) {
P-46168
Dawidsoni
Temat założony przez niniejszego użytkownika
» 2011-12-23 20:41:44
Dzięki:D Działa.

Jeszcze tak dziwnego zapisu nie widziałem. Teraz mi powiedz, co to zmienia, i dlaczego mój zapis sprawiał zawieszanie programu?
P-46172
pekfos
» 2011-12-23 20:42:47
P-46173
« 1 » 2
  Strona 1 z 2 Następna strona