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 - loryisus

#1
Cita de: eferion en  9 Marzo 2014, 01:41 AM
Deberías comprarte un manual de C++... si ya lo tienes, deberías leerlo.

Código (cpp) [Seleccionar]
block_t bit_set::get_block_t( ) const {

y lo mismo en la declaración.


Okis ya va bien gracias por tu tiempo... e intentaré pillarme un manual de C++ para la próxima vez  :-(
#2
Cita de: eferion en  8 Marzo 2014, 23:05 PM

block_t bit_set::get_block_t() {
return block_;

}

void bit_set::set_union(const bit_set& bs){
   block_ = block_ | bs.get_block_t();
}


Si get_block_t no es const no puede ser llamada desde una instancia declarada como const.

En set_union se está haciendo bs.get_block_t y bs está definida como const.

o le añades const a get_block_t o le quitas el const al parámetro bs.


¿Y como se le añadiría el const?  :o . Es que es imprescindible que se mantenga en las funciones y no tengo ni idea de como podría hacerlo.
#3
Buenas, resulta que una vez he acabado este código sobre bloques de bits, me encuentro con el siguiente error de compilación (o parecido) en todas las lineas en las que se menciona "get_block_t":

error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]

El código entero de errores sería este de a continuación:

bit_set_2.cpp: En la función miembro 'void bit_set::set_union(const bit_set&)':
bit_set_2.cpp:35:37: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp: En la función miembro 'void bit_set::set_union(const bit_set&, bit_set&)':
bit_set_2.cpp:39:45: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp: En la función miembro 'void bit_set::set_intersection(const bit_set&)':
bit_set_2.cpp:43:37: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp: En la función miembro 'void bit_set::set_intersection(const bit_set&, bit_set&)':
bit_set_2.cpp:47:45: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp: En la función miembro 'void bit_set::set_diff(const bit_set&)':
bit_set_2.cpp:57:39: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp: En la función miembro 'void bit_set::set_diff(const bit_set&, bit_set&)':
bit_set_2.cpp:61:47: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp: En la función miembro 'bool bit_set::contains(const bit_set&)':
bit_set_2.cpp:75:22: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp:75:51: error: pasar 'const bit_set' como el argumento 'this' de 'block_t bit_set::get_block_t()' descarta a los calificadores [-fpermissive]
bit_set_2.cpp:77:2: error: expected '}' before 'else'

Aquí están las funciones detalladas:

bit_set::bit_set(void):
block_size_(32), /*int = 32 bits*/
block_(0)
{
}

bit_set:: ~bit_set(void){
}

block_t bit_set::get_block_t() {
return block_;

}

void bit_set::set_block_t(block_t b){
block_ = b;
}


void bit_set::set_union(item_t i){
    block_t nuevo = ONE_MASK;
nuevo = nuevo << i;
block_ = block_ | nuevo;
    }
   
void bit_set::set_union(const bit_set& bs){
   block_ = block_ | bs.get_block_t();
}

void bit_set::set_union(const bit_set& i_bs, bit_set& o_bs){
o_bs.set_block_t(block_ | i_bs.get_block_t());
}

void bit_set::set_intersection(const bit_set& bs){
   block_ = block_ & bs.get_block_t();
}

void bit_set::set_intersection(const bit_set& i_bs, bit_set& o_bs){
o_bs.set_block_t(block_ & i_bs.get_block_t());
}

void bit_set::set_diff(item_t i){
    block_t nuevo = ONE_MASK;
nuevo = nuevo << i;
block_ = block_ & (~nuevo);
}

void bit_set::set_diff(const bit_set& bs){
   block_ = block_ & (~bs.get_block_t());
}

void bit_set::set_diff(const bit_set& i_bs, bit_set& o_bs){
o_bs.set_block_t(block_ & (~i_bs.get_block_t()));
}

bool bit_set::belongs(item_t i){
   block_t nuevo = ONE_MASK;
   nuevo = nuevo << i; /*desplazamiento a la izquierda*/
   if ((nuevo & block_)==EMPTY_SET_MASK){ /*comparación con el bloque creado*/
   return false;   
   }else{
  return true;   
   }
}

bool bit_set::contains(const bit_set& a){
    if(a.get_block_t() == (block_ & a.get_block_t())){
return true;
else{
return false;
}
}

void bit_set::write(ostream& os){
char aux[80];

itoa(aux); /*Transforma el bloque en la cadena aux*/
os << aux << std::endl;
}


Y aquí el fichero donde declaré todas las variables de la clase:

#include <iostream>

using namespace std;

typedef unsigned long block_t;
typedef unsigned char item_t;
typedef unsigned char block_size_t;

#define EMPTY_SET_MASK 0x00    // Máscara hexadecimal que representa el 0
#define ONE_MASK       0x01    // Máscara hexadecimal que representa el bit más significativo a 1



    class bit_set {

//========================================================================================
// Atributos privados.
//========================================================================================
private:
block_t block_;
block_size_t block_size_;


Si tienen alguna idea de que podría ser el problema y como podría solucionarlo díganmelo.

Gracias por adelantado
#4
Cita de: ivancea96 en  6 Marzo 2014, 18:55 PM
Te olvidaste de decir cuál es el problema.
Es el que puse arriba en negrita, pero principalmente el problema es que no se a que se refiere exactamente con bloque auxiliar (¿Quizas declarar otro como: block_t nuevo = block_ dentro de la funcion), y tampoco se como introducir una mascara dentro de un bloque de bits.
#5
Buenas, tengo un problema con la asignatura de Algoritmos y Estructura de Datos, les paso uno de los ejercicios que me piden:
- El primero inserta un único elemento dentro del conjunto. Para ello
Se debe crear un bloque auxiliar conteniendo la máscara ONE_MASK y
hacer un desplazamiento de bits a la izquierda tantas veces como
indique el elemento a insertar. Después se efectuará el or lógico con
el conjunto llamante.


El bloque viene declarado así debajo de "using namespace std", el resto de elementos al igual que la función a desarrollar se encuentra en una clase:
(la máscara representa el bit menos significativo a 1)

#include <iostream>
using namespace std;
typedef unsigned long block_t; /*aquí*/
typedef unsigned char item_t;
typedef unsigned char block_size_t;
#define EMPTY_SET_MASK 0x00
#define ONE_MASK 0x01 /*Mascara que mencionan en el enunciado*/
class bit_set {
/*ATRIBUTOS PRIVADOS*/
block_t block_; /*Bloque de bits*/
block_size_t block_size_;


En la función que piden realizar se pasan los siguientes datos:

void set_union(item_t i);


Si necesitan más datos o no me he explicado bien diganmelo.

Gracias por adelantado.