Error porque la función virtual pura en la clase?

Después de copiar el código de Clases de como parámetro de la función de c++ en mi código, obtengo el error: note: because the following virtual functions are pure within 'TEA': y XTEA, pero sólo esas dos funciones. Las otras funciones, AES, BLOWFISH, CAMELIA, RC4, RC5, RC6, etc. están todos trabajando. Sólo esas dos funciones que son erroring. No entiendo por qué.

código de enlace (ligeramente modificado):

class CryptoAlgorithm
{
   public:
      virtual std::string encrypt(std::string DATA) = 0;
      virtual std::string decrypt(std::string DATA) = 0;
      virtual void setkey(std::string KEY) = 0;
};

y TÉ setkey()

void setkey(std::string KEY, 
            unsigned int ROUNDS = 64, 
            uint32_t DELTA = 0x9e3779b9, uint32_t TOTAL = 0xc6ef3720)

Todas las funciones de las otras clases de la misma. cifrar/descifrar sólo han std::string DATA como sus argumentos. void setkey ha std::string KEY y otros argumentos opcionales. Sin embargo, las funciones como RC6, cuya setkey también tiene otros argumentos opcionales no de error.

Alguna razón ¿por qué?

También, todas las clases tienen : public CryptoAlgorithm junto a sus declaraciones.

InformationsquelleAutor calccrypto | 2011-06-16

3 Kommentare

  1. 4

    Virtual de la implementación de la función » definiciones deben tener el mismo protos como sus funciones virtuales puras en la definición de clase abstracta, de lo contrario el compilador trata como a diferentes funciones(se convierten en las sobrecargas), que también están obligados a aplicar cada función virtual pura para que la clase no abstracta(por supuesto que no puede definir sus propias funciones virtuales puras cualquiera). La opción de solucionarlo es con la realización de las clases de implementar setKey con sólo uno argumento de cadena(para que coincida con el virtual proto), entonces tienen una función separada para las sobrecargas(esto podría conducir a la ambiguo llamadas de los parámetros por defecto, sin embargo).

    • encrypt no sólo tienen un argumento. y también, ¿cómo RC6.setkey() pasar si tiene múltiples argumentos opcionales así?
    • yo sólo había de ser capaz de decirle que con las definiciones de los di cuenta de clases, aunque estoy segura de que su causa algunas clases tienen varias versiones de setkey, uno de los cuales el compilador puede igualar a la función virtual pura, o el compilador detenido en múltiplos de el mismo error
    • en el caso de que usted definitivamente no implementar la función virtual si algunas implementaciones de tener más argumentos para setkey, como he dicho, completa las definiciones de clase podría ayudar a aclarar las cosas. también, es que el mensaje de error el mensaje de error completo? parece un poco truncado…
  2. 3

    Usted no puede crear objetos de las clases abstractas. Usted necesita ovverride las funciones virtuales puras en la clase derivada a ser capaz de crear objetos de la clase derivada.

  3. 2

    =0; es puro virtuales en C++, que significa que usted tiene que implementar esos función en el niño las clases de CryptoAlgorithm.

    Y como la Ela, dijo, no se pueden crear objetos de pura virtual (resumen) clases.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea