Visual Studio возможно ошибочная ошибка компилятора - PullRequest
0 голосов
/ 01 июня 2018

Мне пришлось недавно переизобразить свой ноутбук и переустановить visual studio (пробовал 2018, но это меня раздражало, поэтому я откатился на 2015 год, который, кажется, работает намного лучше), я открыл старый проект, и сначала онсказал, что не смог найти набор инструментов для сборки, поэтому я перенаправил его на тот, который только что установилИ попытался снова скомпилировать, и мне не удалось сказать, что в следующей функции:

string getinvnum(vstring range) {
int inv;
string ret;
for (int i = 0; i < range.size(); i++) {
    int temp = stoi(range[i]);
    if (temp > inv) {
        inv = temp;
    }
}
return to_string(inv);}

, что cpp(266): error C4700: uninitialized local variable 'inv' used. и демонстративно отказывается от компиляции.

Строка 266 относится к оператору if.Это совсем не сложная функция, и она, безусловно, инициализируется, фактически, если я наведу указатель мыши на «inv», intellisense обнаружит его замедление.

Затем я решил скопировать и вставить свой исходный код вновый проект, поскольку эта ошибка просто не имела смысла для меня, закомментировал код, относящийся к другим включенным файлам проекта, и попытался перекомпилировать, и он работал без каких-либо жалоб.

Есть ли что-то не так с этим кодом, иликакая-то проблема с изменением в наборе инструментов?Пока все работает, я просто хотел бы понять, если возможно, что случилось / что я сделал, что вызвало эту ошибку.

Может кто-нибудь объяснить мне, почему Visual Studio делает это со мной?

Редактировать: просто скопировать все решение в новый проект, и теперь все это создается без каких-либо проблем.Однако оригинальный, хотя и идентичный код, все еще говорит мне об этой же ошибке.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Да, это ошибка - по крайней мере, логическая ошибка - как указывали другие.Вы не должны игнорировать предупреждения компилятора, вы должны их исправить.MSVC всегда предупредит вас об этом (и других вещах), если вы явно не отключите предупреждения, поэтому будьте настороже в будущем и обращайте должное внимание.Нужно ли указывать компилятору обрабатывать предупреждения как ошибки, это другой вопрос.Я не.Мнения разные.

Но у меня есть более конкретная причина для публикации этого ответа.В сборках DEBUG отладчик Visual Studio предупредит вас (с помощью всплывающего окна) во время выполнения, если вы используете неинициализированную переменную, и покажет вам, где именно вы это сделали.Таким образом, всегда запускайте свой код под отладчиком, и тогда вы будете предупреждены об ошибках, подобных этой, даже если вы пропустите предупреждение компилятора.

0 голосов
/ 01 июня 2018

inv не инициализируется.В зависимости от настроек компилятора проекта, версии компилятора и того, используете ли вы отладку или релиз, компилятор может обнаруживать или не обнаруживать это.

Чтобы устранить проблему, просто инициализируйте inv, чтобы иметь начальное значение.Компилятор пытается защитить вас от трудностей с поиском ошибок из-за inv, имеющего какое-то случайное значение (которое иногда может работать, так как это случайное значение может быть 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...