[C con Clase] Problema con declaración de objeto
Kyosuke Kasuga
kyosuke_cl en yahoo.es
Dom Mayo 25 02:19:21 CEST 2008
Hi!!!, Gracias por tu respuesta Steven, haré lo que me indicas.
Saludos.
Steven Davidson <srd4121 en njit.edu> escribió:
Hola Kyosuke,
Kyosuke Kasuga wrote:
> Hi!!!, k tal todos?, bueno al grano, tengo un programita en C++ hecho
> en wxDev-C++, en donde tengo 1 archivo de recursos, otro de
> declaraciones y 2 archivos de código con extensión CPP, mi problema
> es que en uno de mis archivos de código tengo declarada una clase,
> pero cuando la llamo desde el otro archivo de código, que es donde
> tengo mi funcion WinMain, me sale un error, y no capto como sacarlo,
> el error que me envia es el siguiente:
>
> "aggregate `BaseDatos MiBase' has incomplete type and cannot be
> defined"
>
> Mi clase se llama BaseDatos y mi objeto se llama MiBase, y quiero
> declarar a miBase como un objeto global (publico), en el archivo de
> código donde esta el WinMain le pongo lo siguiente en la parte de
> declaraciones;
>
> class Basedatos;
>
> Pero igual no me funciona, como ya dije antes tengo definida la clase
> en el otro archivo de código, que se encarga especificamente de
> trabajar con MySQL. Cualquier ayuda lo agradecería mucho.
>
El problema está en que el compilador no puede instanciar tu objeto
porque no tiene la definición completa de la clase 'BaseDatos'.
Principalmente, necesita saber la cantidad de bytes que tu objeto va a
ocupar y con 'class BaseDatos;' no es suficiente información.
Intenta incluir "BaseDatos.h" o donde tengas la definición completa de
la clase; o sea, algo más de información que simplemente indicar que se
trata de una clase. Si no puedes, entonces necesitarás usar un puntero
al objeto. Por ejemplo,
BaseDatos *pMiBase;
De todas maneras, no comprendo por qué no puedes dar la definición
entera de la clase 'BaseDatos'. Sospecho que has escrito la definición
de la clase en el ".cpp" y no en el ".h". Deberías tener algo así:
// "BaseDatos.h"
#ifndef _BASEDATOS_H_
#define _BASEDATOS_H_
#include // Posiblemente
class BaseDatos
{
public:
BaseDatos();
~BaseDatos();
...
};
#endif _BASEDATOS_H_
// "BaseDatos.cpp"
#include "BaseDatos.h"
#include // Seguro
BaseDatos::BaseDatos()
{
...
}
~BaseDatos::BaseDatos()
{
...
}
...
En el otro código fuente que contiene 'WinMain()', tendrías el siguiente
esquema:
// "programa.cpp"
#include
#include "BaseDatos.h"
//#include // Seguramente no
WinMain(...)
{
...
}
WinProc(...)
{
...
}
Como puedes ver, necesitas incluir "BaseDatos.h" con la definición
completa de la clase 'BaseDatos', pero no necesariamente las
definiciones de sus funciones miembro. Las implementaciones son
necesarias en el enlazado, cuando el enlazador las requiere.
Espero que esto aclare la duda.
Steven
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Entre más numerosos somos, más cerca estamos de nuestra propia extinción.
http://bisbirudolfo.blogspot.com/
---------------------------------
Enviado desde Correo Yahoo!
La bandeja de entrada más inteligente.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080525/65f82c3a/attachment.html>
Más información sobre la lista de distribución Cconclase