Sdílet prostřednictvím


Chyba kompilátoru C2512

'identifikátor' : není k dispozici žádný vhodný výchozí konstruktor

Poznámky

Výchozí konstruktor, konstruktor, který nevyžaduje žádné argumenty, není k dispozici pro zadanou třídu, strukturu nebo sjednocení. Kompilátor poskytuje výchozí konstruktor pouze v případě, že nejsou k dispozici žádné uživatelem definované konstruktory.

Pokud zadáte konstruktor, který přebírá jiný než void parametr a chcete povolit, aby vaše třída byla vytvořena bez parametrů (například jako prvky pole), musíte také zadat výchozí konstruktor. Výchozí konstruktor může být konstruktor s výchozími hodnotami pro všechny parametry.

Příklad

Běžnou příčinou chyby C2512 je, když definujete konstruktor třídy nebo struktury, který přebírá argumenty, a pak se pokusíte deklarovat instanci třídy nebo struktury bez argumentů. Níže například struct B deklaruje konstruktor, který vyžaduje char * argument, ale ne ten, který nepřijímá žádné argumenty. V maininstanci B je deklarována, ale není zadán žádný argument. Kompilátor generuje C2512, protože nemůže najít výchozí konstruktor pro 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
}

Tento problém můžete vyřešit definováním výchozího konstruktoru pro strukturu nebo třídu, například B() {}, nebo konstruktor, kde všechny argumenty mají výchozí hodnoty, například B (char * = nullptr) {}.