Kompilatorfel C2512

"identifierare" : ingen lämplig standardkonstruktor tillgänglig

Anmärkningar

En standardkonstruktor, en konstruktor som inte kräver några argument, är inte tillgänglig för den angivna klassen, strukturen eller unionen. Kompilatorn tillhandahåller endast en standardkonstruktor om inga användardefinierade konstruktorer tillhandahålls.

Om du anger en konstruktor som tar en icke-void-parameter och du vill tillåta att klassen skapas utan parametrar (till exempel som element i en matris) måste du också ange en standardkonstruktor. Standardkonstruktorn kan vara en konstruktor med standardvärden för alla parametrar.

Example

En vanlig orsak till felet C2512 är när du definierar en klass- eller structkonstruktor som tar argument och sedan försöker deklarera en instans av din klass eller struct utan argument. Nedan deklareras till exempel struct B en konstruktor som kräver ett char * argument, men inte en som inte tar några argument. I maindeklareras en instans av B, men inget argument anges. Kompilatorn genererar C2512 eftersom den inte hittar någon standardkonstruktor för B.

// 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
}

Du kan åtgärda det här problemet genom att definiera en standardkonstruktor för din struct eller klass, till exempel B() {}, eller en konstruktor där alla argument har standardvärden, till exempel B (char * = nullptr) {}.