'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) {},來修正此問題。