Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
"azonosító": nincs megfelelő alapértelmezett konstruktor
Megjegyzések
Az alapértelmezett konstruktor, az argumentumokat nem igénylő konstruktor nem érhető el a megadott osztályhoz, szerkezethez vagy egyesítéshez. A fordító csak akkor biztosít alapértelmezett konstruktort, ha nincs megadva felhasználó által definiált konstruktor.
Ha olyan konstruktort ad meg, amely nem üres paramétert vesz igénybe, és azt szeretné, hogy az osztály paraméterek nélkül (például tömb elemeiként) legyen létrehozva, akkor egy alapértelmezett konstruktort is meg kell adnia. Az alapértelmezett konstruktor lehet olyan konstruktor, amely az összes paraméter alapértelmezett értékeit használja.
Example
A C2512 hiba gyakori oka az, ha argumentumokat tartalmazó osztályt vagy szerkezetkonstruktort határoz meg, majd argumentumok nélkül próbálja deklarálni az osztály vagy a szerkezet egy példányát. Az alábbiakban például egy olyan konstruktort deklarálunk, struct B amely argumentumot char * igényel, de nem olyant, amely nem vesz fel argumentumokat. Ebben maina esetben a rendszer deklarálja a B egy példányát, de nem ad meg argumentumot. A fordító c2512-t hoz létre, mert nem találja a B alapértelmezett konstruktorát.
// 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
}
Ezt a problémát úgy háríthatja el, hogy meghatároz egy alapértelmezett konstruktort a szerkezethez vagy az osztályhoz, például B() {}egy olyan konstruktort, amelyben az összes argumentum alapértelmezett értékekkel rendelkezik, például B (char * = nullptr) {}.