編譯器錯誤 C2512
' identifier ' :沒有適當的預設建構函式可用
預設 建構函式,不需要引數的建構 函式,不適用於指定的類別、結構或等位。 只有在未提供使用者定義建構函式時,編譯器才會提供預設建構函式。
如果您提供採用非 void 參數的建構函式,而且您想要允許以無參數建立類別(例如,作為陣列的元素),您也必須提供預設建構函式。 預設建構函式可為具備所有參數之預設值的建構函式。
範例
錯誤 C2512 的常見原因是當您定義接受引數的類別或結構建構函式,然後嘗試宣告類別或結構實例,而不需要任何引數。 例如, struct B
下面會宣告需要引數的建構函式,但不宣告 char *
不採用引數的建構函式。 在 中 main
,會宣告 B 的實例,但未提供引數。 編譯器會產生 C2512,因為它找不到 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
}
您可以定義結構或類別的預設建構函式,例如 B() {}
,或是所有引數都有預設值的建構函式,例如 B (char * = nullptr) {}
,來修正此問題。