Problem z klasami
Ostatnio zmodyfikowano 2012-03-23 15:51
masterKoper Temat założony przez niniejszego użytkownika |
Problem z klasami » 2012-03-22 23:40:50 Witam. Piszę bo mam problem z klasami. Zacznę od poczatku. Najpierw deklaruję klasę Map, a potem chunk w oddzielnych plikach naglowkowych. Później tablicę obiektów typu chunk tworzę w klasie Map. Gdy chcę wywołać funkcje mdraw to ona dziala, ale jak chce wywolac w funkcji mdraw funkcje drawchunk to już wywala mi błąd, że zmienne w niej nie sa zdeklarowane. Dlaczego to nie działa, czemu klasa chunk nie ma dostepu do pol z klasy map? Pomocy plis. Daje kod: map.h #include "object.h" #include "pngloader.h" #include "player.h" #include "chunk.h"
#include <math.h>
class Map { public: Map( short int flayerscount, int * fchunksize, unsigned int * fmaxmapsize, chunk *** fchunksarray ); ~Map(); short int layerscount; int * chunksize; unsigned int * maxmapsize; chunk *** chunksarray; void mdraw( Player * player ); };
Map * loadMap( const char * file );
#endif
chunk.h #ifndef chunk_h #define chunk_h
#include "object.h" #include "pngloader.h"
class chunk { public: chunk( int xpos, int ypos, Object **** fchunklayersdata ); chunk(); ~chunk(); int * chunkpos; Object **** chunklayersdata; bool chunkvisible; void drawChunk(); };
#endif
funkcja mdraw z klasy Map void Map::mdraw( Player * player ) { player->f_playerChunk =( player->posx /( chunksize[ 0 ] * 32 ) ); player->f_playerChunk = floor( player->f_playerChunk ); player->playerNearChunks[ 0 ] = int( player->f_playerChunk ); player->playerNearChunks[ 1 ] = player->playerNearChunks[ 0 ] - 1; player->playerNearChunks[ 2 ] = player->playerNearChunks[ 0 ] + 1; chunksarray[ player->playerNearChunks[ 0 ] ][ 0 ]->chunkvisible = true; chunksarray[ player->playerNearChunks[ 1 ] ][ 0 ]->chunkvisible = true; chunksarray[ player->playerNearChunks[ 2 ] ][ 0 ]->chunkvisible = true; for( int a = 0; a < 3; a++ ) { chunksarray[ player->playerNearChunks[ a ] ][ 0 ]->chunkvisible = true; chunksarray[ player->playerNearChunks[ a ] ][ 0 ]->drawChunk(); chunksarray[ player->playerNearChunks[ a ] ][ 0 ]->chunkvisible = false; } } funkcja drawChunk z klasy chunk void chunk::drawChunk() { for( unsigned int x = 0; x < chunksize[ 0 ]; x++ ) { for( unsigned int y = 0; y < chunksize[ 1 ]; y++ ) { for( unsigned int l = 0; l < layerscount; l++ ) { if( chunklayersdata[ l ][ x ][ y ] ) { chunklayersdata[ l ][ x ][ y ]->draw(); } } } } } i tutaj petle w tych petlach wywala blad ze zmienne nie zdeklarowane, a mianowicie: C:\..\chunk.cpp|21|error: 'chunksize' was not declared in this scope| C:\..\chunk.cpp|25|error: 'layerscount' was not declared in this scope| a jak dodaje do chunk.h #include "map.h" to jest jescze wiecej blendow te i jeszcze ze chunk was not declared in this scope |
|
malan |
» 2012-03-22 23:57:31 Nie rozumiesz czym jest programowanie obiektowe. Odpowiedź na Twój problem znajduje się w kursie: Klasy (obiekty). Ogólnie mówiąc to do pól chunksize i layerscount musisz się odwoływać na rzecz obiektu klasy Map . Chyba, że zadeklarujesz je lokalnie, w funkcji, ale to już inna sprawa i nie o to nam tutaj chodzi. Przykładowo: Map map; for( unsigned int x = 0; x < map.chunksize[ 0 ]; x++ ) { for( unsigned int y = 0; y < map.chunksize[ 1 ]; y++ ) { for( unsigned int l = 0; l < map.layerscount; l++ ) { if( chunklayersdata[ l ][ x ][ y ] ) { chunklayersdata[ l ][ x ][ y ]->draw(); } } } } |
|
masterKoper Temat założony przez niniejszego użytkownika |
» 2012-03-23 15:51:10 Probowalem dodac do argumentow funkcji drawChunk() Map* m i wtedy odwolac sie do pol, ale wyskakuje blad ze Map was not declared in this scope, nawet jak dodam #include "map.h" - ale wtedy do juz w ogole wszystko sie gryzie bo w map.h jest #include "chunk.h". Ale przemyslalem to i chyba zamiast Map* m dam short int &layerscount i int &chunksize.
|
|
« 1 » |