dependencias circulares

Iniciado por kilodepala2, 11 Mayo 2016, 15:28 PM

0 Miembros y 2 Visitantes están viendo este tema.

kilodepala2

que tal amigos, estoy programando un juego en c++ basado en tiles con vista isometrica. tengo un problema que me esta quemando la cabeza.
la cosa es asi:
tengo una clase mapa, que tiene un puntero bidimensional a clases tile, y la clase tile tiene un puntero a mapa. la clase tile tiene un metodo dibujar(), que dibuja sobre una estructura BITMAP que esta definida en una clase Graphics, accediendo a esta mediante un puntero en mapa.

aqui esta el codigo, el error que obtengo es "Expected ')' before '*'"

donde esta el error?

Código (cpp) [Seleccionar]

//tile.h

#ifndef TILE_H

    #define TILE_H
    #include "mapa.h"
    class Tile
    {

    public:

        Tile(Mapa*, int, int);
        ~Tile();

        void Draw();


    private:

        Mapa *parent;
        int posX;
        int posY;

    };


#endif // TILE_H

[/code=cpp]

[code]//tile.cpp

#include "tile.h"

Tile::Tile(Mapa *_parent, int x, int y)
{
    parent = _parent;
    posX = x;
    posY = y;
}

Tile::~Tile()
{

}

void Tile::Draw()
{
    int px = (posX - posY) * (parent->parent->tile->w /2) + parent->scrollX;
    int py = (posX + posY) * (parent->parent->tile->h /2) + parent->scrollY;

    draw_sprite(parent->parent->buffer, parent->parent->tile, px, py);

    delete px;
    delete py;
}


Código (cpp) [Seleccionar]
//mapa.h
#include "graphics.h"


#ifndef MAPA_H

    #define MAPA_H
    #include "tile.h"
    class Mapa
    {

    public:

        Mapa(Graphics);
        ~Mapa();

        void Draw();

    private:

        Tile *matriz[64][64];
        int scrollX;
        int scrollY;
        Graphics *parent;

    };


#endif // MAPA_H


Código (cpp) [Seleccionar]
#include "mapa.h"

Mapa::Mapa(Graphics *_parent)
{
    parent = _parent;

    for(int i=0; i<64; i++)
    {
        for(int j=0; j<64; j++)
        {
            matriz[j][i] = new Tile(this, j, i);
        }
    }
}

Mapa::~Mapa()
{

}

void Mapa::Draw()
{
    for(int i=0; i<64; i++)
    {
        for(int j=0; j<64; j++)
        {
            matriz[j][i]->Draw();
        }
    }
}

[/code]

ivancea96

Has expuesto el tema, pero no el problema. ¿Qué ocurre con ello?

kilodepala2

Cita de: ivancea96 en 11 Mayo 2016, 15:34 PM
Has expuesto el tema, pero no el problema. ¿Qué ocurre con ello?

disculpa, tuve un error al puiblicar el tema, ahora lo publico bien

ivancea96

No has puesto la línea del error.
En cualquier caso, coloca antes de los #IFDEF de cada clase, "class NOMBRE;", donde NOMBRE es el nombre de la clase del archivo. Comprueba si así funciona.

Ej:
Código (cpp) [Seleccionar]
class Tile;

#ifndef TILE_H
#define TILE_H

#include "mapa.h"

class Tile
{

kilodepala2

Cita de: ivancea96 en 11 Mayo 2016, 15:59 PM
No has puesto la línea del error.
En cualquier caso, coloca antes de los #IFDEF de cada clase, "class NOMBRE;", donde NOMBRE es el nombre de la clase del archivo. Comprueba si así funciona.

Ej:
Código (cpp) [Seleccionar]
class Tile;

#ifndef TILE_H
#define TILE_H

#include "mapa.h"

class Tile
{


tenes razon, disculpa. la linea del error es la linea 12 del primer code.

si pongo el forward como dijiste vos me sale este error:

\mapa.cpp|5|error: prototype for 'Mapa::Mapa(Graphics*)' does not match any in class 'Mapa'

ivancea96

Porque no existe. Tú pusiste:
Código (cpp) [Seleccionar]
Mapa(Graphics);

Querrías decir:
Código (cpp) [Seleccionar]
Mapa(Graphics*);

kilodepala2

Cita de: ivancea96 en 11 Mayo 2016, 16:32 PM
Porque no existe. Tú pusiste:
Código (cpp) [Seleccionar]
Mapa(Graphics);

Querrías decir:
Código (cpp) [Seleccionar]
Mapa(Graphics*);

tenes razon, que error pelotudo...

gracias amigo por tu ayuda jajaj