Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-12-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Problemas con C++Builder 6

Hola amigos estoy teniendo problemas con una prueba que estoy haciendo con clases en C++Builder 6 y no acabo de ver el problema. Este es todo el codigo que llevo:
Main.cpp:
Código PHP:
#include <iostream>
#include <fstream>
#include "clase.h"

using namespace std;
//---------------------------------------------------------------------------

int main(int argccharargv[])
{
    
DATOS datos;
    
DatosPersonales claseDatos;

    
cout << "Introduce el ID: ";
    
cin >> datos.id;

    
cout << "Introduce el nombre: ";
    
cin >> datos.nombre;

    
cout << "Introduce los apellidos: ";
    
cin >> datos.apellidos;

    
cout << "Introduce la edad: ";
    
cin >> datos.edad;

    
claseDatos.SetData(&datos);

    
memset(&datos,0,sizeof(DATOS));

    
claseDatos.GetData(&datos);
    return 
0;
}
//--------------------------------------------------------------------------- 
clase.cpp:
Código PHP:
#include "clase.h"
#include <cstring>
//---------------------------------------------------------------------------

DatosPersonales::~DatosPersonales(){

}
//---------------------------------------------------------------------------

DatosPersonales::DatosPersonales(){

}
//---------------------------------------------------------------------------

//Metodos para obtener informacion
int DatosPersonales::GetId(){
    return 
Datos.id;
}
//---------------------------------------------------------------------------

void DatosPersonales::GetName(char *name){
    
strncpy(name,Datos.nombre,SIZEMAXNAME);
}
//---------------------------------------------------------------------------

void DatosPersonales::GetSpells(char *spells){
    
strncpy(spells,Datos.apellidos,SIZEMAXSPELLS);
}
//---------------------------------------------------------------------------

int DatosPersonales::GetAge(){
    return 
Datos.edad;
}
//---------------------------------------------------------------------------

void DatosPersonales::GetData(DATOS *data){
    
memcpy(data,Datos,sizeof(DATOS));
}
//---------------------------------------------------------------------------

//Metodos para enviar informacion
void DatosPersonales::SetId(int id){
    
Datos.id=id;
}
//---------------------------------------------------------------------------

void DatosPersonales::SetName(char *name){
    
strncpy(Datos.nombre,name,SIZEMAXNAME);
}
//---------------------------------------------------------------------------

void DatosPersonales::SetSpells(char *spells){
    
strncpy(Datos.apellidos,spells,SIZEMAXSPELLS);
}
//---------------------------------------------------------------------------

void DatosPersonales::SetAge(int age){
    
Datos.edad=age;
}
//---------------------------------------------------------------------------

void DatosPersonales::SetData(DATOS *data){
    
memcpy(Datos,data,sizeof(DATOS));
}
//--------------------------------------------------------------------------- 
clase.h:
Código PHP:
#ifndef claseH
#define claseH
#define SIZEMAXNAME 20
#define SIZEMAXSPELLS 30

typedef struct{
    
int id;
    
char nombre[SIZEMAXNAME];
    
char apellidos[SIZEMAXSPELLS];
    
int edad;
}
DATOS;

class 
DatosPersonales{
    private:
        
DATOS Datos;
    public:
        ~
DatosPersonales();
        
DatosPersonales();

        
//Metodos para obtener informacion
        
int GetId();
        
void GetName(char *name);
        
void GetSpells(char *spells);
        
int GetAge();
        
void GetData(DATOS *data);

        
//Metodos para enviar informacion
        
void SetId(int id);
        
void SetName(char *name);
        
void SetSpells(char *spells);
        
void SetAge(int age);
        
void SetData(DATOS *data);
}
//---------------------------------------------------------------------------
#endif 
Y aqui los errores que me salen:
Cita:
[C++ Warning] main.cpp(5): W8058 Cannot create pre-compiled header: header incomplete
[C++ Error] main.cpp(5): E2040 Declaration terminated incorrectly
[C++ Error] main.cpp(13): E2451 Undefined symbol 'cout'
[C++ Error] main.cpp(14): E2451 Undefined symbol 'cin'
Al dar el primer error se me queda en la linea del "using namespace std" y si la comento se me queda en la siguiente.
¿Alguien sabria decirme que puede estar pasando?
Responder Con Cita
  #2  
Antiguo 06-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No probé si el código funciona correctamente o hace lo que debiera, pero para que compile sin error aplica las correcciones marcadas con: <<==.


Clase.h :
Código PHP:
#ifndef claseH
#define claseH
#define SIZEMAXNAME 20
#define SIZEMAXSPELLS 30

typedef struct {
    
int id;
    
char nombre[SIZEMAXNAME];
    
char apellidos[SIZEMAXSPELLS];
    
int edad;
DATOS;

class 
DatosPersonales {
private:
  
DATOS Datos;
public:
  
DatosPersonales();
  ~
DatosPersonales();
  
//Metodos para obtener informacion
  
int GetId();
  
void GetName(char *name);
  
void GetSpells(char *spells);
  
int GetAge();
  
void GetData(DATOS *data);

  
//Metodos para enviar informacion
  
void SetId(int id);
  
void SetName(char *name);
  
void SetSpells(char *spells);
  
void SetAge(int age);
  
void SetData(DATOS *data);
};    
// <<== 

#endif 
Clase.cpp:
Código PHP:
#include "clase.h"
#include <string.h> // <<==

DatosPersonales::~DatosPersonales(){
}

DatosPersonales::DatosPersonales(){
}

//Metodos para obtener informacion
int DatosPersonales::GetId(){
  return 
Datos.id;
}

void DatosPersonales::GetName(char *name){
  
strncpy(nameDatos.nombreSIZEMAXNAME);
}

void DatosPersonales::GetSpells(char *spells){
  
strncpy(spellsDatos.apellidosSIZEMAXSPELLS);
}

int DatosPersonales::GetAge(){
  return 
Datos.edad;
}

void DatosPersonales::GetData(DATOS *data){
  
memcpy(data, &Datossizeof(DATOS));  // <<==    
}

//Metodos para enviar informacion
void DatosPersonales::SetId(int id){
  
Datos.id id;
}

void DatosPersonales::SetName(char *name){
  
strncpy(Datos.nombrenameSIZEMAXNAME);
}

void DatosPersonales::SetSpells(char *spells){
  
strncpy(Datos.apellidosspellsSIZEMAXSPELLS);
}

void DatosPersonales::SetAge(int age){
  
Datos.edad age;
}

void DatosPersonales::SetData(DATOS *data){
  
memcpy( &Datosdatasizeof(DATOS));  // <<==

Te adjunto el código corregido.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip aguml.zip (91,4 KB, 1 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 06-12-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Ok en cuanto pueda lo pruebo pero son los típicos fallos tontos que te vuelves loco y no ves jajaja.
Responder Con Cita
  #4  
Antiguo 06-12-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Ya de paso hago otra consulta sobre lo que voy a añadir al código. La idea es usar fstream para leer y escribir en archivos de forma secuencial usando la estructura DATOS y eso lo hago sin problema en C pero nunca lo hice en C++ con ofstream y ifstream. Se como abrirlo de forma binaria usando ios::binary pero para leer y escribir, que yo sepa, los métodos read y write esperan char* y no se si es lo que tengo que usar ni como hacerlo. ¿Podéis explicarme esa parte solo?
Responder Con Cita
  #5  
Antiguo 06-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Un ejemplo (muy básico) que escribe y lee la estructura en un archivo:
Código PHP:
#include <iostream>
#include <string.h>
#include <fstream>

using namespace std;

const 
int SIZEMAXNAME   20;
const 
int SIZEMAXSPELLS 30;
const 
charFILENAME    "struct.dat";

struct Datos {
  
int id;
  
char nombre[SIZEMAXNAME];
  
char apellidos[SIZEMAXSPELLS];
  
int edad;
};

void saveStructDatos dt );
void readStructDatosdt );

int main()
{
  
// unos datos en dt
  
Datos dt = { 1"Pedro""Diloretto"28 };

  
// guardar en archivo
  
saveStructdt );

  
// limpiar struct
  
memset(&dt0sizeofdt ) );

  
// leer de archivo
  
readStructdt );

  
// mostrar
  
cout << dt.id << " " << dt.nombre << " " << dt.apellidos << " " << dt.edad;

  
cin.get();
  return 
0;
}

void saveStruct (Datos dt )
{
  
ofstream f_outFILENAMEios::binary );
  
f_out.writereinterpret_cast<char*>( &dt ), sizeofdt ) );
  
f_out.close();
}

void readStruct (Datosdt )
{
  
ifstream f_inFILENAMEios::binary );
  
f_in.readreinterpret_cast<char*>( &dt ), sizeofdt ) );
  
f_in.close();

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 06-12-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
¿Y que diferencia hay entre estos dos prototipos?
Código PHP:
void readStruct (Datosdt );
void readStruct (Datosdt ); 
¿Con ambos podría conseguir lo mismo?
Si es así ¿por que usar uno en lugar de otro?
Responder Con Cita
  #7  
Antiguo 06-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si, en C++ se puede conseguir lo mismo con ambos y, salvo algunos casos, se puede prescindir de las referencias. En C no existe el paso de parámetros por referencia (si bién se simula con punteros).

La referencia es como un alias o etiqueta de una variable por lo que deben inicializarse al declararlas,
Código PHP:
  int nro 115;
  
int &ref_nro nro;

  
int &ref;  // no tiene sentido 
mientras que el puntero es una variable que almacena una dirección de memoria.

¿ Por qué usar uno u otro en los parámetros ? creo que la ventaja mas notoria es mayor simpleza y legibilidad.
Puntero:
Código PHP:
void inc(inti, const int n)
{
  *
+= n;
}

int main()
{
  
int x 5;

  
inc( &x);
  
cout << // 10
... 
Referencia:
Código PHP:
void inc(inti, const int n)
{
  
+= n;
}

int main()
{
  
int x 5;

  
inc(x5);
  
cout << x// 10
... 
Buscando por los términos sin dudas hallaras mas detalles, como por ejemplo en este enlace: Parámetros por valor y por referencia

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-12-2016 a las 19:52:23.
Responder Con Cita
  #8  
Antiguo 06-12-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Muchas gracias por las aclaraciones.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas al instalar Indy en Builder 6 Angel.Matilla C++ Builder 1 26-11-2015 10:50:09
Problemas con los hilos en Builder aguml C++ Builder 21 31-03-2014 12:34:35
Ayuda!!!Problemas en C++ Builder. Por Favor lisette C++ Builder 2 29-02-2012 06:04:35
problemas al compilar con MyMAC en C++Builder 6 orlymach Conexión con bases de datos 0 03-07-2010 13:08:53
Problemas PageControl en Builder franfl C++ Builder 5 01-10-2008 05:14:47


La franja horaria es GMT +2. Ahora son las 14:23:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi