Heim >Backend-Entwicklung >C++ >Warum tritt „kein Standardkonstruktor für die Klasse „Blowfish' auf und wie kann das Problem behoben werden?

Warum tritt „kein Standardkonstruktor für die Klasse „Blowfish' auf und wie kann das Problem behoben werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-28 16:22:12987Durchsuche

Why Does

Standardkonstruktorfehler bei der Objektinitialisierung

Bei der Kapselung der Verschlüsselungsfunktionalität in der Blowfish-Klasse ist beim Versuch, eine Instanz von GameCryptography zu erstellen, ein Fehler aufgetreten . Die Fehlermeldung „Für die Klasse ‚Blowfish‘ ist kein Standardkonstruktor vorhanden“ weist darauf hin, dass ein Standardkonstruktor fehlt.

Wenn einer Klasse ein Konstruktor fehlt, generiert der Compiler normalerweise einen Standardkonstruktor ohne Argumente. Wenn jedoch ein Nicht-Standardkonstruktor definiert ist (wie in diesem Fall), verzichtet der Compiler auf die Generierung dieses Standardkonstruktors.

Lösungen

Um den Fehler zu beheben, Sie können entweder einen Standardkonstruktor für Blowfish definieren oder die Objektinitialisierung ändern.

1. Hinzufügen eines Standardkonstruktors:

Fügen Sie der Blowfish-Klasse einen Standardkonstruktor hinzu, wie zum Beispiel:

Blowfish() {}

Dieser Konstruktor initialisiert das Objekt, ohne einen Algorithmus anzugeben.

2. Angeben des Algorithmus bei der Objektinitialisierung:

Wenn Sie eine Instanz von Blowfish in GameCryptography erstellen, geben Sie den Algorithmus explizit an. Zum Beispiel:

GameCryptography::GameCryptography(unsigned char key[])
{
    _blowfish = Blowfish(CBC);
}

3. Verwenden der C 11-Standardelementinitialisierung:

In C 11 oder höher können Sie die Standardelementinitialisierung verwenden, um Elemente automatisch auf ihre Standardwerte zu initialisieren. Dadurch können Sie einen nicht standardmäßigen Konstruktor definieren und dennoch über einen „standardmäßigen“ Konstruktor verfügen:

Blowfish(BlowfishAlgorithm algorithm = CBC);

GameCryptography::GameCryptography(unsigned char key[]) : _blowfish() {}  // Default-initialize _blowfish

Hinweis zur Terminologie

Die Betriebsarten ( (z. B. ECB, CBC, CFB) sind selbst keine Verschlüsselungsalgorithmen. Sie als Algorithmen zu bezeichnen, kann zu Verwirrung führen.

Das obige ist der detaillierte Inhalt vonWarum tritt „kein Standardkonstruktor für die Klasse „Blowfish' auf und wie kann das Problem behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn