Freigeben über


Compilerfehler C2512

'Identifier': Kein geeigneter Standardkonstruktor verfügbar

Ein Standardkonstruktor, ein Konstruktor, der keine Argumente erfordert, ist für die angegebene Klasse, Struktur oder Union nicht verfügbar. Der Compiler stellt einen Standardkonstruktor nur bereit, wenn keine benutzerdefinierten Konstruktoren bereitgestellt werden.

Wenn Sie einen Konstruktor bereitstellen, der einen nicht void-Parameter verwendet und die Erstellung der Klasse ohne Parameter zulassen möchten (z. B. als Elemente eines Arrays), müssen Sie auch einen Standardkonstruktor angeben. Beim standardmäßigen Konstruktor kann es sich um einen Konstruktor mit standardmäßigen Werten für alle Parameter handeln.

Beispiel

Eine häufige Ursache für fehler C2512 ist, wenn Sie einen Klassen- oder Strukturkonstruktor definieren, der Argumente akzeptiert, und sie versuchen dann, eine Instanz Ihrer Klasse oder Struktur ohne Argumente zu deklarieren. Im Folgenden wird beispielsweise ein Konstruktor deklariert, struct B der ein char * Argument erfordert, aber kein Argument, das keine Argumente akzeptiert. In main, eine Instanz von B wird deklariert, aber kein Argument angegeben. Der Compiler generiert C2512, da er keinen Standardkonstruktor für B finden kann.

// C2512.cpp
// Compile with: cl /W4 c2512.cpp
// C2512 expected
struct B {
   B (char *) {}
   // Uncomment the following line to fix.
   // B() {}
};

int main() {
   B b;   // C2512 - This requires a default constructor
}

Sie können dieses Problem beheben, indem Sie einen Standardkonstruktor für Ihre Struktur oder Klasse definieren, z B() {}. B. einen Konstruktor, in dem alle Argumente Standardwerte aufweisen, z B (char * = nullptr) {}. B. . .