Luego de mucho luchar ya hallamos la solución de esta pregunta que tantos lectores de este sitio web presentan. Si tienes algo que aportar no dudes en compartir tu información.
Solución:
Si define una clase sin ningún constructor, el compilador sintetizará un constructor para usted (y ese será un constructor predeterminado, es decir, uno que no requiere ningún argumento). Si, sin embargo, usted hacer definir un constructor, (incluso si toma uno o más argumentos) el compilador no sintetice un constructor para usted: en ese momento, ha asumido la responsabilidad de construir objetos de esa clase, por lo que el compilador “da un paso atrás”, por así decirlo, y le deja ese trabajo a usted.
Tienes dos opciones. Debe proporcionar un constructor predeterminado o debe proporcionar el parámetro correcto cuando define un objeto. Por ejemplo, podrías cambiar tu constructor para que se parezca a:
Blowfish(BlowfishAlgorithm algorithm = CBC);
… por lo que el ctor podría invocarse sin (explícitamente) especificar un algoritmo (en cuyo caso usaría CBC como algoritmo).
La otra alternativa sería especificar explícitamente el algoritmo cuando defina un objeto Blowfish:
class GameCryptography
Blowfish blowfish_;
public:
GameCryptography() : blowfish_(ECB)
// ...
;
En C++ 11 (o posterior) tiene una opción más disponible. Puede definir su constructor que toma un argumento, pero luego decirle al compilador que genere el constructor que tendría si no definiera uno:
class GameCryptography
public:
// define our ctor that takes an argument
GameCryptography(BlofishAlgorithm);
// Tell the compiler to do what it would have if we didn't define a ctor:
GameCryptography() = default;
;
Como nota final, creo que vale la pena mencionar que ECB, CBC, CFB, etc., son modos de operación, no algoritmos de encriptación en sí mismos. Llamarlos algoritmos no molestará al compilador, pero es irrazonablemente probable que cause un problema para otros que lean el código.
Porque tienes esto:
Blowfish(BlowfishAlgorithm algorithm);
No es un defecto constructor. El constructor predeterminado es uno que no toma parámetros. es decir
Blowfish();
Un constructor predeterminado es un constructor que no tiene parámetros o, si los tiene, todos los parámetros tienen valores predeterminados.
Puedes añadir valor a nuestro contenido informacional tributando tu experiencia en las anotaciones.