我最近不得不重新塑像我的笔记本电脑,并重新安装了视觉工作室(试过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语句有关。 这根本不是一个复杂的功能,它肯定是初始化的,事实上如果我将鼠标悬停在&#34; inv&#34;智能感知它的减速。
然后我决定将我的源代码复制并粘贴到一个新项目中,因为这个错误对我来说没有任何意义,注释掉了与其他包含项目文件相关的代码,并尝试重新编译,并且它没有任何投诉。< / p>
此代码是否有问题,或者工具集中的更改存在问题? 虽然一切正常,但我想了解,如果可能的话,发生了什么/我做了什么导致了这个错误。
任何人都可以向我解释为什么visual studio会对我这样做吗?
编辑:只需将整个解决方案复制到一个新项目中,现在整个事情都可以毫无问题地构建。然而,原始的,虽然相同的代码,仍然告诉我同样的错误。
答案 0 :(得分:2)
inv
未初始化。根据项目编译器设置,编译器版本以及您是使用调试还是释放编译器可能会也可能不会检测到此。
要解决此问题,只需初始化inv
即可获得初始值。编译器试图保护您免受由于inv
具有某些随机值而导致的难以发现的错误(有时可能会起作用,因为该随机值可能为0)。
答案 1 :(得分:0)
是的,这是一个错误 - 至少是一个逻辑错误 - 正如其他人所指出的那样。你不应该忽略编译器警告,你应该修复它们。 MSVC会一直警告你这个(以及其他事情),除非你明确地关闭警告,以便将来留意,并给予应有的注意。是否应该告诉编译器将警告视为错误是另一回事。我没有。意见各不相同。
但是我有更具体的理由发布这个答案。在DEBUG构建中,如果您使用未初始化的变量并且向您显示确切的位置,则Visual Studio调试器将在运行时提醒您(使用弹出窗口)。因此,始终在调试器下运行您的代码,然后即使您错过了编译器警告,您也会收到类似错误的警告。