Ver Mensaje Individual
  #1  
Antiguo 21-10-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
No me compila una clase

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 origstring 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 imovimientorotaciontotal;
   
size_t pospos2;
   
//Las variables serviran para registrar la posicion
   //de las letras y calcular la semilla

   
for(i=0rotacion=0texto.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(letrasmovimiento1);
      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 imovimientorotaciontotal;
   
size_t pospos2;
   for(
i=0rotacion=0i<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(letrasmovimiento1);
      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=0cadena.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 origstring sem);
      ~
Vigenere();
      
string cifrar();
      
string descifrar();
      
//Esto es publico porque es la unica forma de
      //accesar a los datos de la clase
}
//---------------------------------------------------------------------------
#endif 
Responder Con Cita