Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
"идентификатор" : нет подходящего конструктора по умолчанию
Конструктор по умолчанию, конструктор, который не требует аргументов, недоступен для указанного класса, структуры или объединения. Компилятор предоставляет конструктор по умолчанию, только если не предоставляются пользовательские конструкторы.
Если вы предоставляете конструктор, который принимает параметр непустой, и вы хотите разрешить создание класса без параметров (например, в качестве элементов массива), необходимо также указать конструктор по умолчанию. Конструктор по умолчанию может быть конструктором со значениями по умолчанию для всех параметров.
Пример
Распространенная причина ошибки 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) {}
.