(solucionado)c++: Ayuda array dentro de una clase.

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
berni69
Forista Nuevo
Forista Nuevo
Mensajes: 14
Registrado: Mié Ago 19, 2009 7:00 am
Contactar:

(solucionado)c++: Ayuda array dentro de una clase.

Mensaje por berni69 » Mar Oct 16, 2012 9:30 pm

Buenas noches, estoy empezando aprogramar en C++, estoy portando un proyecto de java creado por mi, pero necesito velocidad, por lo tanto java, no me termina de funcionar demasiado bien.

Tengo un problema con la definición de las clases y los arrays dentro de las clases... No me encuentra el constructor adecuado para la clase aunque exista..

Si alguien me puede ayudar con esto, se lo agradecería mucho.

Tengo esto:
DataRecord.h

Código: Seleccionar todo

class DataRecord
{
public:	
double* lambda;
double* Theta;
double* R;
int length;
DataRecord(const int max);
};
DataRecord.cpp

Código: Seleccionar todo

#include "DataRecord.h"
DataRecord::DataRecord(const int max){

lambda=new double[max];
Theta=new double[max]; 
R=new double[max];
length=max;
}

y si hago esto:

Código: Seleccionar todo

DataRecord dataRecord;//Esto esta declarado como privado en el .h

----------------------
int dataRecordLenght = 6683;//40*163;
Crystal::Crystal(const char* XML){
dataRecord=DataRecord(dataRecordLenght);
load(XML);
}
el compilador me dice
elements/crystal.cpp: En el constructor ‘Crystal::Crystal(const char*)’:
elements/crystal.cpp:7:35: error: no se encontró una función coincidente para la llamada a ‘DataRecord::DataRecord()’
elements/DataRecord.h:9:3: nota: los candidatos son: DataRecord::DataRecord(int)
elements/DataRecord.h:3:1: nota: DataRecord::DataRecord(const DataRecord&)
Alguien podria decirme que estoy haciendo mal?
Última edición por berni69 el Mié Oct 17, 2012 7:43 pm, editado 1 vez en total.
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: c++: Ayuda array dentro de una clase.

Mensaje por hipersayan_x » Mar Oct 16, 2012 10:48 pm

Te faltan varias cosas. Tenes 2 opciones:

1) Pasar un valor por defecto a max, así:

DataRecord.h

Código: Seleccionar todo

class DataRecord
{
    public:	
        double* lambda;
        double* Theta;
        double* R;
        int length;
        DataRecord(const int max = 100);
};
Y crear una variable que apunte a un objeto DataRecord, así:

Código: Seleccionar todo

DataRecord *dataRecord;
// ----------------------
int dataRecordLenght = 6683;//40*163;

Crystal::Crystal(const char* XML)
{
    dataRecord = new DataRecord(dataRecordLenght);
    load(XML);
}
o

2) Pasar un valor por defecto a max, y a su vez definir el constructor copia y el operador asignación:

Operators in C and C++

Para poder usar la clase de la manera en la que vos la intentaste usar anteriormente.

Obviamente que la mejor solución es la segunda.

Off topic:
Ah, y un detalle mínimo. Las propiedades de una clase SIEMPRE declaralas como privadas. Trabaja siempre con encapsulamiento.
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net
Avatar de Usuario
berni69
Forista Nuevo
Forista Nuevo
Mensajes: 14
Registrado: Mié Ago 19, 2009 7:00 am
Contactar:

Re: c++: Ayuda array dentro de una clase.

Mensaje por berni69 » Mar Oct 16, 2012 11:40 pm

Buenas noches, aún no lo he podido comprobar, muchas gracias por haber contestado tan rápido.


De tus afirmaciones me llama la atención esto, te hablo desde la ignoracia sobre como funciona C++:

"Obviamente que la mejor solución es la segunda."

No entiendo porqué es tan obio, en un código que busca la optimización temporal, no es mejor acceder directamente a la memoria antes que ir copiando cantidades de datos tan grandes?


Respecto a trabajar con encapsulamiento, lo hago habitualmente, pero esta clase, al contener arrays tan grandes, necesito acceder a los 3 arrays simultaneamente, si hago llamadas a funciones, pierdo bastante tiempo moviendo objetos al "stack", o almenos en java era así, es mucho mas lento hacer un return R[index] que acceder directamente.
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: c++: Ayuda array dentro de una clase.

Mensaje por hipersayan_x » Mié Oct 17, 2012 12:25 am

Pues no conozco el diseño de tu programa, pero en este caso, sí puede ser valida la 1° opción.
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net
Avatar de Usuario
berni69
Forista Nuevo
Forista Nuevo
Mensajes: 14
Registrado: Mié Ago 19, 2009 7:00 am
Contactar:

Re: c++: Ayuda array dentro de una clase.

Mensaje por berni69 » Mié Oct 17, 2012 3:56 pm

Gracias!! Ha funcionado :)
Avatar de Usuario
Yoyo
Administrador
Administrador
Mensajes: 3125
Registrado: Mar Jun 06, 2006 7:00 am
Ubicación: España
Contactar:

Re: c++: Ayuda array dentro de una clase.

Mensaje por Yoyo » Mié Oct 17, 2012 4:14 pm

berni69 escribió:Gracias!! Ha funcionado :)
Si consideras que tu tema fue solucionado, por favor, considera editar el título del primer mensaje y agregar (Solucionado) para que sirva de referencia en futuras búsquedas.

Un saludo
Avatar de Usuario
berni69
Forista Nuevo
Forista Nuevo
Mensajes: 14
Registrado: Mié Ago 19, 2009 7:00 am
Contactar:

Re: (solucionado)c++: Ayuda array dentro de una clase.

Mensaje por berni69 » Mié Oct 17, 2012 7:43 pm

;) hecho
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje