Error C4700 uninitialized local variable 'd' used
Может кто-нибудь помочь мне понять, почему он сообщает об ошибке выше?
Ошибка означает, что вы (вероятно?) Прочитали неопределенное значение. Поведение чтения неопределенного значения не определено (не принимая во внимание определенное исключение, которое, очевидно, не применимо в вашем случае).
Похоже, что компилятор определил, что вы используете значение (члены) d
перед инициализацией, и пытается помочь диагностировать проблему.
Технически, чтение неопределенного значения не делает программу плохо сформированной, поэтому запрещается компиляция. Вполне возможно, что вы настроили свой компилятор на намеренное нарушение стандарта, отказавшись от компиляции в случае предупреждения. Если нет, то это может быть ошибкой соответствия в компиляторе.
Решение: не читать неопределенные значения. Вы можете присвоить инициализации значение ноль или перечислить инициализацию для других значений. См., Например, случаи 1 и 4.
Незначительные исправления о номенклатуре:
Случай 3. Работает, вызывать предоставленный пользователем пустой конструктор, но a, b и c инициализируются случайными значениями мусора
Точнее: элементы не инициализированы, и потенциально 1 остаются с неопределенными значениями.
1 В вашем примере вы объявляете переменные со статическим хранилищем. Они изначально инициализируются нулями перед динамической инициализацией. Таким образом, в вашем примере члены не имеют неопределенных значений, а обнуляются.
Случай 4. Работает, инициализировать все до 0, вызывая конструктор по умолчанию
int
s не имеют «конструкторов по умолчанию». Они являются инициализированными значениями. Значение инициализации int
равно нулю инициализации.