Compiler Error C2512
'identifier' : no appropriate default constructor available
A default constructor, a constructor that requires no arguments, is not available for the specified class, structure, or union. The compiler supplies a default constructor only if no user-defined constructors are provided.
If you provide a constructor that takes a non-void parameter, and you want to allow your class to be created with no parameters (for example, as the elements of an array), you must also provide a default constructor. The default constructor can be a constructor with default values for all parameters.
Example
A common cause of error C2512 is when you define a class or struct constructor that takes arguments, and then you attempt to declare an instance of your class or struct without any arguments. For example, struct B
below declares a constructor that requires a char *
argument, but not one that takes no arguments. In main
, an instance of B is declared, but no argument is supplied. The compiler generates C2512 because it can't find a default constructor for 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
}
You can fix this issue by defining a default constructor for your struct or class, such as B() {}
, or a constructor where all the arguments have default values, such as B (char * = nullptr) {}
.