Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con errores extraños. Metodología para encontrar error?

Estas en el tema de Problema con errores extraños. Metodología para encontrar error? en el foro de C/C++ en Foros del Web. Hola amigos. Tenía un programa completo que voy mejorando. Funcionaba hasta hoy, pero de repente ha dado este error en Modelo.h: error: declaration of 'struct ...
  #1 (permalink)  
Antiguo 20/05/2011, 06:09
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 3 meses
Puntos: 2
Problema con errores extraños. Metodología para encontrar error?

Hola amigos.

Tenía un programa completo que voy mejorando. Funcionaba hasta hoy, pero de repente ha dado este error en Modelo.h:

error: declaration of 'struct Vista::Controlador' // error 1 marcado abajo
error: changes meaning of 'Controlador' from 'struct Controlador' // error 2 marcado abajo


En principio se supone que tengo tres archivos. Controlador incluye vista y modelo, y para que no haya inclusión mutua hago el truco de poner la declaracion de la clase que incluye y la inclusión de la cabecera en el .cpp.


Vista.h:

Código:
#ifndef VISTA_H
#define VISTA_H

#include <iostream>
#include <SDL.h>
#include <SDL_opengl.h>
#include <SDL_ttf.h>
#include <gl\glu.h>
#include <vector>
#include <math.h>
#include <string>
#include "NodoGrafico.h"
#include "Camara.h"
#include "../utilidades/creadorMallas.h"
#include "../utilidades/objLoader/objLoader.h"
#include "../utilidades/gestorTexturas.h"

class Controlador;  // <--------- ERROR 2 AQUI

class Vista{
public:
        Vista(Controlador *cont);
     .....
VIsta.cpp contiene al principio

#include "Vista.h"
#include "../controlador/Controlador.h"



Modelo.h

Código:
#ifndef MODELO_H
#define MODELO_H

#include <string>
#include <map>
#include "Nodo.h"

class Controlador; // <<--------- ERROR 1 AQUI

class Modelo
{
    typedef std::map<std::string, Nodo*> parejaNodoNombre;

    public:
        Modelo(const Controlador *cont);
...
y Contiene algo parecido a vista.cpp

Controlador.h

Código:
#ifndef CONTROLADOR_H
#define CONTROLADOR_H
#define FPS_INTERVAL 1.0 //seconds.

#include <SDL.h>
#include <SDL_opengl.h>
#include <iostream>
#include <ctime>
#include "../vista/Vista.h"
#include "../modelo/Modelo.h"
#include "../modelo/Nodo.h"


class Controlador
{
    public:
        Controlador():_funcionando(true){};
...
NO LO HE TOCADO DESDE EL PRINCIPIO, ASÍ QUE AQUI NO HAY PROBLEMA.


...

Con esta situación he estado modificando especialmente Vista.h y modelo.h un poquitín.

Por qué de repente me dice esto?.

Es más, ¿por qué de repente me habla en algunos sitios de Vista::Controlador::funcion dentro de la clase controlador??. Por qué hace esa combinacion tan extraña?.

Ejemplo:

error: cannot define member function 'Vista::Controlador::inicializar' within 'Vista'

Cuando estoy en Controlador.cpp en esta funcion
int Controlador::inicializar(){


¿¿¿¿¿¿

Como puedo ir haciendo cambios para localizar el error?.

Gracias amigos.
__________________
Darkgaze
  #2 (permalink)  
Antiguo 20/05/2011, 06:17
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: Problema con errores extraños. Metodología para encontrar error?

Bueno, tengo más información.

parece ser que el error2 sale porque no se puede llamar a una función con el mismo nombre que una clase/typedef/struct existente.

Parece que "existe" un struct llamado Controlador que está fastidiando aquí.

http://stackoverflow.com/q/282800

La gracia es que no está.

VOy a ver si encuentro más información para ver si podéis ayudarme.

Gracias a todos
__________________
Darkgaze
  #3 (permalink)  
Antiguo 20/05/2011, 10:09
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: Problema con errores extraños. Metodología para encontrar error?

BUeno. me auto respondo. :)

Ya encontré el error.

Para este tipo de errores el compilador saca lo primero que encuentra y no hay manera de idenfiticar lo que pasa.

Mirando la lista de errores posteriores he visto que el problema parece estar ligado a Vista.h.

Rebuscando he visto que lo que pasaba era que en las declaraciones de las funciones fallaban muchas cosas a partir de un punto. Busqué el principio y encontré una declaración



public:
Vista(Controlador *cont);
bool inicializar();
void comprobarEventos(){ <------------ error
void blablabla....


Gracias a pesar de todo. !
__________________
Darkgaze

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:42.