分享方式:


編譯器錯誤 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) {} ,來修正此問題。