Hola amigos, vi un articulo interesante sobre el cifrado Vigenese y venia con el codigo y tenia varias cosas con las que no me podia compilar asi que las he reparado pero me sigue sin compilar fundamentalmente por dos errores y no se como solucionarlos.
Cita:
[C++ Warning] Unit1.cpp(21): W8058 Cannot create pre-compiled header: header incomplete
[C++ Error] Unit1.cpp(21): E2111 Type 'Vigenere' may not be defined here
[C++ Error] Unit1.cpp(21): E2136 Constructor cannot have a return type specification
[C++ Warning] Unit1.cpp(44): W8012 Comparing signed and unsigned values
[C++ Warning] Unit1.cpp(51): W8012 Comparing signed and unsigned values
[C++ Warning] Unit1.cpp(58): W8012 Comparing signed and unsigned values
[C++ Warning] Unit1.cpp(80): W8012 Comparing signed and unsigned values
[C++ Warning] Unit1.cpp(89): W8012 Comparing signed and unsigned values
[C++ Warning] Unit1.cpp(106): W8012 Comparing signed and unsigned values
[C++ Error] Unit1.cpp(112): E2285 Could not find a match for 'string::append(char)'
|
Son los errores del principio de la lista y el del final de la lista ya que el resto son Warnings que me dicen que estoy comparando enteros con signo y sin signo y no es importante en este caso.
El codigo lo tengo acomodado ahora mismo asi:
Unit1.cpp:
Código PHP:
/************************************************
* Nombre : Vigenere.cpp *
* *
* Cifrado de cesar de sustitución multiple *
* por medio de sumas y restas del alfabeto *
* *
* Fulapol *
* [email protected] *
* my.opera.com/fulapol *
* *
************************************************/
/************************************************
* *
* El Constructor que debe recibir la cadena a *
* tratar y la cadena semilla *
* *
************************************************/
#include "Unit1.h"
Vigenere::Vigenere(string orig, string sem){
letras = "abcdefghijklmnopqrstuvwxyz";
this->texto = limpiar(orig);
this->semilla = limpiar(sem);
}
Vigenere::~Vigenere(){
}
/************************************************
* *
* El metodo cifrar, que regresa una cadena de *
* texto que solo despues de ser cifrada *
* *
************************************************/
string Vigenere::cifrar(){
string final;
int i, movimiento, rotacion, total;
size_t pos, pos2;
//Las variables serviran para registrar la posicion
//de las letras y calcular la semilla
for(i=0, rotacion=0; i < texto.length(); i++, rotacion++){
pos = letras.find(texto.at(i));
pos2 = letras.find(semilla.at(rotacion));
total = ((int)(pos+pos2))%letras.length();
//El total que marca la posicion de la letra y la
//semilla sumadas
if(total > letras.length())
movimiento = total - letras.length();
else
movimiento = total;
//Para asegurarnos que esta dentro del rango
final.append(letras, movimiento, 1);
if(rotacion == semilla.length())
rotacion = 0;
//Si se acaba la semilla, regresar al principio
}
return final;
}
/************************************************
* *
* El metodo descifrar, que regresa una cadena *
* de texto que solo despues de ser descifrada *
* *
************************************************/
string Vigenere::descifrar(){
//La funcion es exactamente la misma que en el metodo
//cifrar, solo que aqui las posiciones se restan para
//eliminar la semilla del texto
string final;
int i, movimiento, rotacion, total;
size_t pos, pos2;
for(i=0, rotacion=0; i<texto.length(); i++, rotacion++){
pos = letras.find(texto.at(i));
pos2 = letras.find(semilla.at(rotacion));
total = ((int)(pos - pos2)) % letras.length();
if(total < 0)
movimiento = total + letras.length();
else
movimiento = total;
final.append(letras, movimiento, 1);
if(rotacion == semilla.length())
rotacion = 0;
}
return final;
}
/************************************************
* *
* El metodo limpiar, que regresa una cadena de *
* texto que solo contiene los caracteres *
* soportados por la clase *
* *
************************************************/
string Vigenere::limpiar(string cadena){
int i;
string final;
for(i=0; i < cadena.length(); i++){
if(cadena.at(i) > 64 && cadena.at(i) < 91)
cadena.at(i) += 32;
//Pasamos el caracter a minusculas
if(letras.find(cadena.at(i)) != -1)
final.append(cadena.at(i));
//Agregamos a la cadena final el caracter
//si se encuentra en la variable letras
}
return final;
}
Unit1.h:
Código PHP:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <cstring.h>
class Vigenere{
private:
string texto,semilla,letras;
string limpiar(string cadena);
//Las variables son privadas, el metodo limpiar
//es privada ya que solo lo utilizan los otros
//metodos para limpiar la entrada
public:
Vigenere(string orig, string sem);
~Vigenere();
string cifrar();
string descifrar();
//Esto es publico porque es la unica forma de
//accesar a los datos de la clase
}
//---------------------------------------------------------------------------
#endif