Autor |
Mensaje |
Elio Pez
Nivel 7
Edad: 38
Registrado: 02 Oct 2007
Mensajes: 443
Ubicación: Hiperespacio
Carrera: Informática y Sistemas
|
|
Gente tengo un problema q me esta comiendo la cabeza. La cuestion es asi:
Tengo 4 clases, class A, class B, class C y class D
La clase B hereda de la A y la C y la D heredan de la B. Hasta aca funcionaria en principio todo bien.
El problema es en el main, yo hago esto:
#include <iostream>
#include "A.h"
#include "B.h"
#include "C.h"
#include "D.h"
cuando instancio A y B funciona todo bien, no tira ningun error. Pero si instancio C o D no me los reconoce como clases y me tira un error diciendome q la funcion C (o D, dependiendo el caso) no esta declarada .
La verdad q no le encuentro la vuelta, si alguno me puede dar una mano, agradecido.
|
|
|
|
_________________ We are a way for the Cosmos to know itself
¿Sos nuevo en la FIUBA? entonces mira el institucional que hizo Knoxville
|
|
|
|
|
Stoma
Nivel 8
Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510
Carrera: Informática
|
|
No se que problema tenes...
hice esto y funcionó sin problemas:
/****************/
Archivo A.h
#ifndef __A_H__
#define __A_H__
#include <iostream>
class A{
public:
int valA;
A();
};
#endif
/************************/
Archivo B.h
#ifndef __B_H__
#define __B_H__
#include "A.h"
#include <iostream>
class B:public A{
public:
B();
};
#endif
/****************/
Archivo C.h
#ifndef __C_H__
#define __C_H__
#include "B.h"
#include <iostream>
class C:public B{
public:
C();
};
#endif
/*****************/
Archivo D.h
#ifndef __D_H__
#define __D_H__
#include "B.h"
#include <iostream>
class D:public B{
public:
D();
};
#endif
/***************/
Los cpp son todos iguales (cambiando la letra correspondiente), te muestro uno a modo de ejemplo:
Archivo A.cpp
#include "A.h"
A::A(){
std::cout<<"instancia de A"<<std::endl;
}
/*************/
main.cpp
#include "A.h"
#include "B.h"
#include "C.h"
#include "D.h"
int main(){
A* objA= new A();
B* objB= new B();
C* objC= new C();
D* objD= new D();
}
compilo sin problema, y al ejecutar tuve la salida por pantalla correspondiente:
instancia de A
instancia de A
instancia de B
instancia de A
instancia de B
instancia de C
instancia de A
instancia de B
instancia de D
Presione una tecla para continuar...
Danos un poco más de detalles para ver tu problema en particular
|
|
|
|
_________________
Si yo te digo carnaval...
|
|
|
|
|
Elio Pez
Nivel 7
Edad: 38
Registrado: 02 Oct 2007
Mensajes: 443
Ubicación: Hiperespacio
Carrera: Informática y Sistemas
|
|
Ya lo encontre el problema, es una terrible boludes. Me da la re
La cuestion es q adentro de la clase A tenia declarado un enumerado y ese enumerado sin pensarlo habia puesto:
enum{
C,
D,
};
Entonces no me reconocia las clases C y D porq chocaban las 2 declaraciones.
Eclipse choto q no me decia q estaban duplicadas las declaraciones me comi la cabeza toda la mañana....................ARGHHHHH
|
|
|
|
_________________ We are a way for the Cosmos to know itself
¿Sos nuevo en la FIUBA? entonces mira el institucional que hizo Knoxville
|
|
|
|
|
Stoma
Nivel 8
Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510
Carrera: Informática
|
|
Elio Pez escribió:
|
Eclipse choto q no me decia q estaban duplicadas las declaraciones me comi la cabeza toda la mañana....................ARGHHHHH
|
y el Señor Byte dijole a Moises:
'No injuriaras a Eclipse'
|
|
|
|
_________________
Si yo te digo carnaval...
|
|
|
|
|
Dr Emett Brown
Nivel 5
Edad: 39
Registrado: 17 Dic 2006
Mensajes: 178
Ubicación: viajando con el DeLorean DMC-12
Carrera: Informática
|
|
Elio Pez escribió:
|
Eclipse choto q no me decia q estaban duplicadas las declaraciones me comi la cabeza toda la mañana....................ARGHHHHH
|
Más respeto a Eclipse!!!!!!!!!
Con todo respeto, si vas a pretender que un compilador te resuelva la vida y te diga "Acá esta el error flaco", vas mal.
En realidad, Eclipse fue diseñado para Java, y por lo tanto el CDT es un plugin en constante desarrollo.
Más allá de todo, la solución que da Stoma al incluir como primeras lineas de un header a:
Código:
|
#ifndef __MI_HEADER__
#define __MI_HEADER__
/* tu codigo */
#endif
|
es una de las mejores prevenciones ante futuros dolores de cabeza.
Otra gran prevención posible es declarar la clase antes de ser usada:
Código:
|
//declaracion
class A;
class B : public A;
class A
{
//definicion
};
|
Saludos.
|
|
|
|
_________________
¿Por qué tengo que ver la vida que nunca voy a a tener? - Seba De Caro dixit
¿Sabés cuántos exceptions te hacen falta? - Yoda dixit
|
|
|
|
|
Rada
Moderador
Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
|
|
|
|
|
Dr Emett Brown
Nivel 5
Edad: 39
Registrado: 17 Dic 2006
Mensajes: 178
Ubicación: viajando con el DeLorean DMC-12
Carrera: Informática
|
|
Rada escribió:
|
alguien usa o uso alguna vez el #pragma once ?
|
Tenés razón: es otra opción más que viable.
Si bien nunca lo usé, el artículo de la wikipedia me lo está obligando a usar (en el futuro ).
|
|
|
|
_________________
¿Por qué tengo que ver la vida que nunca voy a a tener? - Seba De Caro dixit
¿Sabés cuántos exceptions te hacen falta? - Yoda dixit
|
|
|
|
|
Rada
Moderador
Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
|
|
|
|
|
Elio Pez
Nivel 7
Edad: 38
Registrado: 02 Oct 2007
Mensajes: 443
Ubicación: Hiperespacio
Carrera: Informática y Sistemas
|
|
Para tratar de redimirme con el tema del eclipse voy a decir q lo uso un monton y q me gusta. La expresion "Eclipse choto" fue una reaccion en caliente porq me costo un huevo darme cuenta a MI donde habia cometido el error , en ese momento me hubiese venido bien una ayudita. Y la realidad es q al final no recuerdo bien como fue pero el eclipse me tiro donde podia estar el error.
Sobre esto:
Dr Emett Brown escribió:
|
Código:
|
#ifndef __MI_HEADER__
#define __MI_HEADER__
/* tu codigo */
#endif
|
|
el eclipse cuando creas un archivo .h nuevo te lo genera solo
lo del #pragma once no lo habia visto nunca, pero parece interesante.
|
|
|
|
_________________ We are a way for the Cosmos to know itself
¿Sos nuevo en la FIUBA? entonces mira el institucional que hizo Knoxville
|
|
|
|
|
|