带有枚举的 C++ Visual Studio 调试器错误
Posted
技术标签:
【中文标题】带有枚举的 C++ Visual Studio 调试器错误【英文标题】:C++ Visual Studio Debugger Error with Enumeration 【发布时间】:2017-07-28 14:31:57 【问题描述】:我正在构建一个公牛和奶牛游戏(必须通过命令提示符猜测单词)我在 Microsoft Visual Studio 2017 中遇到问题,我使用枚举检查输入错误。如果有错误,调试器中应该有一个错误,比如 Word_Length,或者如果它没问题,它应该显示 OK。 然后,当我运行调试器时,它不会显示 OK 或 Word_Length 之类的消息,而是显示一些数字。
我会做错什么吗?或者是 VS .. 我觉得这很奇怪,因为我正在与 c++ 课程一起做这个,所以代码应该没问题。 感谢您的帮助!
--代码--------
这里是我声明枚举的地方
enum class EGuessStatus
OK,
Not_Isogram,
Wrong_Length,
Not_Lowercase
;
这里我说如果字长不对,返回错误
else if (Guess.length() != GetHiddenWordLength()) //if the word length is
//wrong, return an error
return EGuessStatus::Wrong_Length;
然后我说如果 Guess 没问题,就返回 OK
else //otherwise, return ok
return EGuessStatus::OK;
它位于 main.cpp 中,然后我将其标记为调试。
EGuessStatus Status = BCGame.checkGuessValidity(Guess);
在这种情况下,单词是“行星”,如您所见,调试器会喷出奇怪的数字。
This is an image of the debugger once I input 'planet' which is supposed to be correct
【问题讨论】:
在您截屏的那一刻,Status 尚未初始化,因为调试器通常会突出显示要执行的 next 语句。按下一条语句并再次检查。如果问题仍然存在,请编辑您的问题。 这不是一个“奇怪的数字”,而是0x'CCCC'CCCC
。 MSVC 调试版本中的典型未初始化值。
@MSalters 那么这对我的代码意味着什么?
@iMarioOfficial:好吧,正如 patatahooligan 指出的那样,您在定义 Status
的那一刻拍摄了一张照片,但尚未初始化(因为您已经在那里停止了执行)。所以持有0xCCCCCCCCC
的未初始化变量一点也不奇怪。
@MSalters 哦,好吧,我明白你在说什么,但现在我把红点的东西(大声笑)放在 Status 之后,它根本无法运行。
【参考方案1】:
我不确定我是否完全理解这个问题,但您似乎正在尝试将枚举(谁的基础类型是整数)转换为字符串表示形式?
如果是这样,那么您可以使用查找表。我使用 std::map 并将人类可读的消息映射到每个枚举。然后您可以执行 'std::string msg = lookup_map_.at(enum);'。
【讨论】:
【参考方案2】:哇,我觉得自己很笨。 在调试器上,我单击了 Auto 而不是 locals。 当我检查当地人时,会显示正确的响应! 不过感谢您的帮助!
【讨论】:
以上是关于带有枚举的 C++ Visual Studio 调试器错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 Visual Studio 2013(C++) 的 OpenCV:findContours 断点错误
带有 C++ Visual Studio Community 2013 的 Arduino 程序
在 Visual Assist 或 Vanilla Visual Studio 中切换枚举的自动完成功能
如果无法创建 vcxproj 文件,是不是可以将 MSBuild 用作带有 Visual Studio 代码的 C++ 编译器?