[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