Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - cNoob

#11
Touchez.
#12
Hola

He escrito la siguiente funcion que se supone que debe cargar un vector de un archivo y retornarlo
Código (cpp) [Seleccionar]
vector<long int> Cargar (void)//carga el vector del archivo y lo devuelve
{
    ComprobarArchivo();
    vector<long int> cargar;
    ifstream leer; leer.open("Numeros.dat", ios::in |ios::binary);
    leer.read((char *) &cargar, sizeof cargar);
    return cargar;
}

pero cuando la llamo desde la siguiente linea de codigo
Código (cpp) [Seleccionar]
vector<long int> numero = Cargar;
CodeBlocks de da el siguiente error: "conversion from 'std::vector<long int>()' to non-scalar type 'std::vector<long int>' requested" y no se por que puede estar causado...
#13
Lo haré, muchas gracias por la ayuda :D
#14
Creo que puede servir para mi programa, pero tengo un par de dudas al respecto:

1)La lista de números que voy a utilizar podría llegar a contener varios miles de valores, consumiría esto muchos recursos del ordenador o produciría un tiempo de ejecución muy largo?

2)Si creo un objeto vector y lo guardo sin más en un fichero, se guardan también sus valores? (lo pregunto por si la clase funciona con algo parecido a estructuras dinámicas y al guardar el objeto tal cual solo se guarda un puntero a donde están almacenados los valores o algo por el estilo, no se si me explico)
#15
Programación C/C++ / Guardar un array en un archivo
26 Diciembre 2017, 13:52 PM
Tengo un problema al tratar de guardar un array en un archivo con la biblioteca fstream, y es que tengo una estructura dinámica que almacena una serie de números y me interesa guardarla de alguna forma, por lo que he decidido meter todos los valores en una estructura con un array (el cual es de tamaño variable, puesto que la cantidad de números que tiene que almacenar varía) y almacenar esta estructura en el fichero.
La estructura es la siguiente:
Código (cpp) [Seleccionar]
long int cantidadAlmacenar = 0;
struct guardarArchivo{
    long int cantidad = cantidadAlmacenar;
    long int numero [cantidad] = {0};
};


Y la funcion que transforma la estructura dinámica en el array (en verdad es un método de una clase)es la siguiente:
Código (cpp) [Seleccionar]
void CCifras::guardarArchivo(void)
{
    struct guardarArchivo guardar;
    struct nodo* guia = comienzo;
    for(int i = 0; i < cantidad; i++)
    {
        guardar.numero[i] = guia.numero;
        guia = guia.siguiente;
    }
    ofstream ficheroEscribir; ficheroEscribir.open ("BaseDatos.dat", ios::out | ios::binary);
    ficheroEscribir.write((char *) &guardar, sizeof(guardar));
    ficheroEscribir.close();
}

Pero esta técnica hace aguas por todas partes (ya la he utilizado y funciona cuando la cantidad de valores a almacenar es fija, pero este no es el caso) y el compilador me da el error: "invalid use of non-static data member" en la linea donde pone
Código (cpp) [Seleccionar]
long int numero [cantidad] = {0};.
El caso, si alguien puede decirme cual es el fallo en mi forma de hacerlo o directamente la forma correcta de hacer lo que quiero se lo agradecería XD
#16
Hola, tengo una clase que trabaja con polinomios (CPolinomio) y me gustaría hacer un método que fuese capaz de convertir un double d en un objeto ( sería el polinomio d*x^0) pero solo se hacer conversiones de objeto a otro tipo de valor (si mal no recuerdo)
Clase::operator tipo_valor(); pero no se como hacer lo contrario. Sospecho que debe ser algo así como una función externa amiga de la clase, pero no se como proceder más allá de eso...
#17
Oh, entiendo... supuse que el compilador haría uso del operador de asignación para pasar los datos de un objeto al otro, pero ahora ya se que no. Gracias   ;D
#18
Cita de: CalgaryCorpus en 19 Diciembre 2017, 17:56 PM
Crea un constructor de copia
Vale, acabo de escribir el siguiente constructor copia y el programa funciona perfectamente
Código (cpp) [Seleccionar]
CPolinomio::CPolinomio(const CPolinomio& P)
{
    grado = P.grado;
    crearPolinomio(grado);
    for (int i = 0; i <= grado; i++) termino[i] = P.termino[i];
}

Todavía no se por que se necesita el constructor copia... (si alguien puede explicármelo por favor) muchas gracias por la ayuda :D
#19
Cita de: CalgaryCorpus en 19 Diciembre 2017, 17:56 PM
Crea un constructor de copia
Por qué un constructor copia solucionaría el problema?
#20
Vale, he descubierto que pasa, cuando el operador devuelve el objeto "resultado" el atributo "termino" es devuelto también y el destructor de la clase borra la memoria donde estaba el array con los términos, por lo que estos no son copiados como deberían por el operador = (si se elimina el destructor el programa funciona perfectamente, pero este es necesario para vaciar la memoria reservada por el operador new).
Mi pregunta ahora es: ¿como puedo hacer que primero se copien los términos y que cuando esta operación finalice se ejecute el destructor del objeto resultado?