带有枚举的 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++ 编译器?

带有 Visual Studio 2013 编译器的 Eclipse CDT (C++ IDE)

在 Visual Studio 中,表达式必须具有带有 Windows 窗体的类类型 C++