Heim >Backend-Entwicklung >C++ >Warum wirft mein Code „Für die Klasse „Blowfish' existiert kein Standardkonstruktor' aus?

Warum wirft mein Code „Für die Klasse „Blowfish' existiert kein Standardkonstruktor' aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-27 18:06:12759Durchsuche

Why Does My Code Throw

Standardkonstruktor fehlt für die Klasse „Blowfish“: Den Fehler verstehen

Der Fehler „Für die Klasse „Blowfish“ existiert kein Standardkonstruktor“ tritt auf beim Versuch, eine Instanz der Blowfish-Klasse zu erstellen, ohne Argumente anzugeben, obwohl ein Konstruktor definiert wurde, der einen BlowfishAlgorithm erfordert Argument.

Grund für den Fehler

Wenn einer Klasse ein Konstruktor fehlt, generiert der Compiler standardmäßig einen Standardkonstruktor, der keine Argumente akzeptiert. Wenn jedoch ein Nicht-Standardkonstruktor definiert wird (d. h. einer, der Argumente erfordert), geht der Compiler davon aus, dass die Konstruktorbehandlung explizit vom Entwickler übernommen wird, und generiert nicht mehr automatisch einen Standardkonstruktor. Daher ist die Angabe von Argumenten beim Erstellen einer Instanz der Klasse obligatorisch.

Lösungen

Um diesen Fehler zu beheben, haben Sie mehrere Möglichkeiten:

  • Fügen Sie einen Standardkonstruktor hinzu: Definieren Sie einen Standardkonstruktor für die Blowfish-Klasse, der keine Argumente akzeptiert. Zum Beispiel:
Blowfish() = default;
  • Geben Sie dem Konstruktor ein Argument an: Geben Sie beim Erstellen einer Instanz der Blowfish-Klasse explizit das erforderliche Argument an. Zum Beispiel:
Blowfish blowfish(BlowfishAlgorithm::CBC);
  • Verwenden Sie die Designated Initialization Syntax (C 11 oder höher):Verwenden Sie einen Konstruktor, der ein Argument akzeptiert und eine =-Standardklausel hinzufügt Generieren Sie einen Standardkonstruktor. Dies ermöglicht die Koexistenz beider Konstruktorüberladungen.
class GameCryptography {
public:
    GameCryptography(BlofishAlgorithm); // Constructor with argument

    // Generate a default constructor by delegating to the compiler
    GameCryptography() = default;
};

Zusätzliche Hinweise

Es ist hervorzuheben, dass ECB, CBC, CFB usw. Modi von darstellen Betrieb für Verschlüsselungsalgorithmen und nicht für die Verschlüsselungsalgorithmen selbst. Dieser semantische Fehler hat zwar keinen Einfluss auf die Kompilierung, kann aber für Codeleser verwirrend sein.

Das obige ist der detaillierte Inhalt vonWarum wirft mein Code „Für die Klasse „Blowfish' existiert kein Standardkonstruktor' aus?. 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