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

Problem z klasami

Ostatnio zmodyfikowano 2012-03-23 15:51
Autor Wiadomość
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
C/C++
#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
C/C++
#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
C/C++
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
C/C++
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
P-53113
malan
» 2012-03-22 23:57:31
Nie rozumiesz czym jest programowanie obiektowe. Odpowiedź na Twój problem znajduje się w kursie: » Kurs C++Klasy (obiekty) lekcja. 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:
C/C++
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();
            }
        }
       
    }
}
P-53114
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.
P-53119
« 1 »
  Strona 1 z 1