Erro do compilador C2512
identifier' : nenhum construtor padrão apropriado disponível
Um construtor padrão, um construtor que não requer argumentos, não está disponível para a classe, a estrutura ou a união especificadas. O compilador fornece um construtor padrão somente se nenhum construtor definido pelo usuário for fornecido.
Se você fornecer um construtor que usa um parâmetro não nulo e desejar permitir que sua classe seja criada sem parâmetros (por exemplo, como os elementos de uma matriz), você também deverá fornecer um construtor padrão. O construtor padrão pode ser um construtor com valores padrão para todos os parâmetros.
Exemplo
Uma causa comum do erro C2512 ocorre quando você define um construtor de classe ou struct que usa argumentos e então tenta declarar uma instância de sua classe ou struct sem argumentos. Por exemplo, struct B
a seguir declara um construtor que requer um argumento char *
, mas não um que não usa argumentos. Em main
, uma instância de B é declarada, mas nenhum argumento é fornecido. O compilador gera C2512 porque não consegue encontrar um construtor padrão para 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
}
Você pode corrigir esse problema definindo um construtor padrão para seu struct ou classe, como B() {}
, ou um construtor em que todos os argumentos têm valores padrão, como B (char * = nullptr) {}
.