Wywołanie funkcji z klasy i crash programu
Ostatnio zmodyfikowano 2013-03-13 14:50
krissuu Temat założony przez niniejszego użytkownika |
Wywołanie funkcji z klasy i crash programu » 2013-03-13 11:13:49 Cześć. Mam problem z programem. Wszystko się elegancko kompiluje, ale gdy próbuje wywołać jakąś funkcje z klasy, program się zawiesza... Nie mam zielonego pojęcia dlaczego. Oto mój kod: #include "stdafx.h"
class tablica { int rozmiar_tab; int * wsk_tab; public: void pokaz_tab(); void dodaj_element(); void usun_element(); void fun_zer(); void fun_sort_ros(); void fun_sort_mal(); static int liczba_tablic; };
void tablica::dodaj_element() { int p; int liczba; int * new_tab1 = new int[ rozmiar_tab + 1 ]; cout << "Jaka liczba chcesz, aby pojawila sie na koncu tablicy? "; cin >> liczba; for( p = 0; p < rozmiar_tab; p++ ) { new_tab1 = wsk_tab; } new_tab1[ p ] = liczba; for( int i = 0; i < p + 1; i++ ) { if( i % 5 == 0 ) cout << endl; cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t"; } cout << endl << endl; }
void tablica::usun_element() { int ktory; int * new_tab2 = new int[ rozmiar_tab - 1 ]; cout << "Element tablicy o jakim indeksie chcesz usunac? "; cin >> ktory; for( int i = 0; i < ktory; i++ ) { new_tab2 = wsk_tab; if( i % 5 == 0 ) cout << endl; cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t"; } for( int j = ktory + 1; j < rozmiar_tab; j++ ) { new_tab2 = wsk_tab; cout << "tab[" << j - 1 << "]= " << wsk_tab[ j ] << "\t"; if( j % 5 == 0 ) cout << endl; } delete[] wsk_tab; wsk_tab = new_tab2; cout << endl; }
void tablica::pokaz_tab() { int rozmiar_tab; int * wsk_tab; cout << "Zawartosc tablicy po wpisaniu elementow: " << endl; for( int i = 0; i < rozmiar_tab; i++ ) { if( i % 5 == 0 ) cout << endl; cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t"; } cout << "\n\nLiczba elementow w tablicy wynosi: " << rozmiar_tab << endl << endl; }
void tablica::fun_zer() { for( int i = 0; i < rozmiar_tab; i++ ) { wsk_tab[ i ] = 0; } cout << "Zawartosc tablicy po wyzerowaniu elementow: " << endl; for( int i = 0; i < rozmiar_tab; i++ ) { if( i % 5 == 0 ) cout << endl; cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t"; } } void tablica::fun_sort_ros() { for( int i = 0; i < rozmiar_tab - 1; i++ ) { for( int j = 0; j < rozmiar_tab - 1; j++ ) { if( wsk_tab[ j + 1 ] < wsk_tab[ j ] ) swap( wsk_tab[ j + 1 ], wsk_tab[ j ] ); } } cout << "Zawartosc tablicy po sortowaniu rosnacym elementow: " << endl; for( int i = 0; i < rozmiar_tab; i++ ) { if( i % 5 == 0 ) cout << endl; cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t"; } }
void tablica::fun_sort_mal() { for( int i = 0; i < rozmiar_tab - 1; i++ ) { for( int j = 0; j < rozmiar_tab - 1; j++ ) { if( wsk_tab[ j + 1 ] > wsk_tab[ j ] ) swap( wsk_tab[ j + 1 ], wsk_tab[ j ] ); } } cout << "Zawartosc tablicy po sortowaniu malejacym elementow: " << endl; for( int i = 0; i < rozmiar_tab; i++ ) { if( i % 5 == 0 ) cout << endl; cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t"; } }
int _tmain( int argc, _TCHAR * argv[] ) { int rozmiar_tab; int * wsk_tab; int wybor_opcji; tablica * obiekt_tab; unsigned wyjscie = 0; do { cout << "Jakiego rozmiaru tablice chcesz utworzyc? "; cin >> rozmiar_tab; cout << endl; wsk_tab = new int[ rozmiar_tab ]; for( int i = 0; i < rozmiar_tab; i++ ) { cout << "Podaj element tablicy o " << i << " indeksie: "; cin >> wsk_tab[ i ]; } cout << "\n 1 - Pokaz tablice." << endl; cout << " 2 - Dodaj element do tablicy." << endl; cout << " 3 - Usun element z tablicy." << endl; cout << " 4 - Wyzeruj elementy tablicy." << endl; cout << " 5 - Posortuj tablice malejaco." << endl; cout << " 6 - Posortuj tablice rosnaco." << endl; cout << " 7 - Zakoncz dzialanie programu. " << endl; cout << "Ktory nr wybierasz? "; cin >> wybor_opcji; switch( wybor_opcji ) { case 1: { obiekt_tab->pokaz_tab(); } case 2: { obiekt_tab->dodaj_element(); } case 3: { obiekt_tab->usun_element(); } case 4: { obiekt_tab->fun_zer(); } case 5: { obiekt_tab->fun_sort_mal(); } case 6: { obiekt_tab->fun_sort_ros(); } case 7: { wyjscie = 1; break; } } } while( !wyjscie ); system( "PAUSE" ); return 0; }
Będę wdzięczny za pomoc. |
|
pekfos |
» 2013-03-13 13:33:04 |
|
krissuu Temat założony przez niniejszego użytkownika |
» 2013-03-13 13:42:22 Podobny ponieważ trochę się na nim wzorowałem, ale nadal nie mogę dojść dlaczego mi nie działa. Dodam, że wszystkie funkcje są sprawdzone i działają. Więc robię coś źle z klasami... Dopiero zaczynam przygodę z programowaniem obiektowym więc nie wiem wszystkiego. |
|
pekfos |
» 2013-03-13 13:44:43 obiekt_tab to pusty wskaźnik. |
|
krissuu Temat założony przez niniejszego użytkownika |
» 2013-03-13 13:49:08 Tak, próbowałem zrobić z niego wskaźnik na tablice, tak jak jest w podanym przez Ciebie temacie, lecz nie do końca mi to wychodziło i program się nie kompilował. |
|
pekfos |
» 2013-03-13 13:51:05 obiekt_tab to pusty wskaźnik.. Nie możesz wywołać metody, na rzecz nieistniejącego obiektu. |
|
krissuu Temat założony przez niniejszego użytkownika |
» 2013-03-13 14:04:43 Yhm czyli powinienem zrobić tak jak jest w tamtym temacie. Utworzyć taka jakby bazę (tablice wskaźników na obiekty) która będzie przechowywała te moje tablice tak? Heh łatwiej powiedzieć, trudniej zrobić no ale będę próbował. |
|
pekfos |
» 2013-03-13 14:16:11 Nie, powinieneś utworzyć obiekt. Klasa * wsk = new Klasa; wsk->sth();
|
|
« 1 » 2 |