Ver la versión completa : Ayuda, definicion de clase que necesita a otra clase y esta a la anterior... :P
the_goulin
29/08/2005, 12:41
Bueno, pues estaba yo aqui con mi GpFrogger cuando me surgio un problema de esos divertidos :loco: ...
La cuestion es que tengo 2 clases y ambas se encesitan entre si, asi que la definición de ellas queda algo como asi (son 2 archivos)
#include "claseB"
class claseA
{
claseB pp;
};
#include "claseA"
clase claseB
{
claseA pp;
};
cuando compila me dice que no encuentra claseA :( por que en el momento de incluirlo aun no se ha declarado...
le a pasado a alguien?
Saludillos y gracias
The_Goulin
the_goulin
29/08/2005, 12:56
Bueno, he cambiado el sistema y ya no me hace falta... :) (si , ya se que ha sido en un par de minutos :P sorry)
pero igualmente ¿alguien sabe si es posible?
Gracias
The_Goulin
Ufff... visto así a mi me da que no, porque necesitas tener las 2 clases declaradas para poder ser usadas entre si... :S es un p**o lio xD has probao con subclases con herencia?? una vez declaradas las 2 clases (A y B), creas una subclase para clase anterior y ahi es cuando pones eso de claseA pp y claseB pp (se me acaba de ocurrir, no quiero decir que funcione ni na xDD, ademas, tampoco soy experto en C++ xDDDD)
No se, eso que te ha pasado es como decir "Para entrar necesito la llave, pero para tener la llave necesito entrar"... xDDD ais ke lio...
chico yo de herencias no uso xq t metes un lio bastante, si quieres q B use algo de A en A lo pones en la parte publica y los usa B perfectamente yo en uno de cartas q estoy haciendo asi lo hago y no m complico con las herencias porque creo q luego es algo asi
void NombreObjeto::FunciondeB::FunciondeA()
the_goulin
29/08/2005, 14:47
jejeej, se agradecen las respuestas ^_^ ya se que es un poco locura lo que comento, pero es que en un momento me sature programando y hice una "cruzada de punteros" (jolin parece el nombre de un farwest de esos)
^_^
igualmente no esta demas saber como lo solucionarian los demas programadores ^_^
Saludillos
The_Goulin
jejeej, se agradecen las respuestas ^_^ ya se que es un poco locura lo que comento, pero es que en un momento me sature programando y hice una "cruzada de punteros" (jolin parece el nombre de un farwest de esos)
^_^
igualmente no esta demas saber como lo solucionarian los demas programadores ^_^
Saludillos
The_Goulin
No se puede hacer lo que pides porque entrarías en una 'heréncia cíclica'.
Si analizas bien lo que pides, es que A herede de B que a su vez herede de A. Pero como que A hereda de B, entonces B heradaría de el mismo y así hasta el infinito.
Lo más probable es que tengas que crear una tercera clase C con los miembros y métodos comunes a las clases A y B. Estas dos clases heredarian de C.
Si explicas mejor lo que quieres hacer y porqué, te podré decir lo que haría yo.
Oankali.
PD: Por cierto, ¿has solucionado el problema ese de que te petaba con el emulador y no con windows?
the_goulin
29/08/2005, 15:44
No se puede hacer lo que pides porque entrarías en una 'heréncia cíclica'.
Si analizas bien lo que pides, es que A herede de B que a su vez herede de A. Pero como que A hereda de B, entonces B heradaría de el mismo y así hasta el infinito.
Lo más probable es que tengas que crear una tercera clase C con los miembros y métodos comunes a las clases A y B. Estas dos clases heredarian de C.
Si explicas mejor lo que quieres hacer y porqué, te podré decir lo que haría yo.
Oankali.
PD: Por cierto, ¿has solucionado el problema ese de que te petaba con el emulador y no con windows?
Bueno, al final lo he solucionado con una tercera clase ^_^, creo que el otro sistema que estaba usando era un poco "locura"
Lo del problema del emulador y el windows si que lo solucione ... problemas de dobles punteros, pero aun sigo sin entender pq en windows funcionaba y en la Gp no ... pq ademas hice más pruebas con dobles punteros y no tube problemas.. nu se nu se.
pero nada Oankali q el SDK con C++ va de coña ^_^ ya tengo gran parte del Frogger hecho con el y todo funciona a la perfección :brindis:
Saludillos,
The_Goulin
Conderock
29/08/2005, 17:06
Oye the_goulin ¿es que no te llegó el set corregido? :]
the_goulin
29/08/2005, 17:29
Oye the_goulin ¿es que no te llegó el set corregido? :]
si que me llego :)
pero aun no lo he puesto :P estoy un poco perro ultimamente ... esta noche lo compilo y te lo paso para tu visto bueno :)
en los proximos proyectos me lo montare mejor y pasare un sistema para que podais probar vosotros los graficos, con el GpSnake a sido un poco lioso... sorry U_U!
Saludillos,
The_Goulin
Conderock
29/08/2005, 18:27
No problem ;)
Gammenon
02/09/2005, 17:28
Saludos
Una posible solucion es esta: Tenemos esas 2 clases, cada una en su fichero. En A.h seria:
class B;
class A
{
B *patatin; // O B &patatin. Luego esto hay que inicializarlo en el constructor asi: A::A(const B &jarl) : patatin(jarl) {}
};
Luego en A.cpp tendriamos que hacer el #include "B.h".
En el fichero B.h tendriamos simplemente lo siguiente:
#include "A.h"
class B
{
A patatan; // O sino puntero o referencia
}
La cuestion es que C++ necesita la definicion de una clase (o estructura) para instanciar un objeto de la misma, pero un puntero o una referencia siempre tiene el mismo tamaño (32 bits, por ejemplo). Asi, si le dices que existe una clase llamada B, puedes declarar un puntero o una referencia a ella, y luego definirla.
Espero no haberme equivocado, y disculpad el rollo ;)
drocaborbon
02/09/2005, 20:03
Si no me falla la memoria de mis tiempos de estudiante de c++ se puede hacer una herencia de dos clases y crear una nueva..... :loco:
Gammenon
02/09/2005, 21:18
Si se puede, mediante la herencia multiple, pero the_goulin no hereda sino que agrega las clases ;)
No. No te equivocas Gammenon.
Perdonad muchachos pero creo que os confundís. Cuando os referís a herencia, en realidad queréis decir agregación.
Esto es herencia:
class Figura
{
protected:
int color;
float pos[2]; // Posición 0:x - 1:y
public:
Figura();
...
}
class Rectangulo : public Figura
{
private:
float ancho, alto;
public:
Rectangulo();
...
}
La clase Rectángulo hereda los atributos de la clase Figura (puesto que un rectángulo es una figura), en este caso color y pos.
Si tenemos esto:
class A
{
...
}
class B
{
A pp;
...
}
es una composición o agregación: un atributo de la clase B es del tipo objeto A.
En cambio, si tenemos esto:
class B
{
A *pp;
...
}
es una asociación: un atributo de la clase B es del tipo referencia (un puntero, vamos...) al objeto A.
:sobando: :sobando: :sobando: :sobando: :sobando: :sobando:
Más rollo teórico en el libro Thinking in C++ (http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html) y en la página de Estructura de Datos II de la Universidad de Jaén (http://wwwdi.ujaen.es/asignaturas/eedd2/)
Perdonad por el post tan largo, pero he pasado mucho tiempo (demasiado :-) programando en c++ :shock:
¡Animo con el Frogger the_goulin! :brindis:
Si se puede, mediante la herencia multiple, pero the_goulin no hereda sino que agrega las clases ;)
Vaya. Te me has adelantado... :sobando:
Gammenon
02/09/2005, 22:11
Mergos lo ha explicado mu bien, y ademas ha mentado el Thinking in C++. Recomiendo encarecidamente estos libros (son dos volumenes). El primer volumen para aprender C++ desde cero, y el segundo para las STL (aunque no se como andara esto en la GP32).
Hasta pronto :)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.