elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Error de compilación en bloque de bits en: 8 Marzo 2014, 17:48 pm
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":
Código:
 
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:
Código:
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:
Código:
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:
Código:
#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
2  Programación / Programación C/C++ / Máscaras y bloques de bits en: 6 Marzo 2014, 18:52 pm
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)
Código:
#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:
Código:
void set_union(item_t i);

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

Gracias por adelantado.


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines