如何解决以下与枚举相关的错误

how to resolve following enum related error?

本文关键字:枚举 错误 何解决 解决      更新时间:2023-10-16

在abc.h文件中,我有:

class a
{
public:
    enum RTDFmodes { 
        verbose,
        NONE,
    };
    class b
    {
        friend class a;
    public:
        RTDFmodes _verbose_mode;
        b(RTDFmodes verbose)
        {
            _verbose_mode=verbose;
        }
    };
};

在abc.cpp中,我有:

int main()
{
    a::RTDFmodes verbose;
    a::b x(verbose);
    return 0;
}

当我运行错误时,出现"verbose正在使用而未初始化"。请帮助解决如何删除此错误。

您意识到您在三个不同的地方使用术语verbose,对吧?枚举值verbose的名称与b函数的参数以及main():中的a::RTDFmodes实例的名称相同

enum RTDFmodes { 
        verbose,  // constant enum value

b(RTDFmodes verbose) // local variable in b() named verbose

a::RTDFmodes verbose;  // local variable in main() named verbose



如果您希望verbose命名枚举值,则需要更改其他两个:

b(RTDFmodes mode) // the argument is now named mode and can contain the value 'verbose'
a::RTDFmodes mode = a::RTDFmodes::verbose;  // mode contains the value 'verbose'



NONE后面还有一个逗号,但后面没有:

enum RTDFmodes { 
        verbose,
        NONE,  // Right here
    };



关于您的特定错误,您在main中声明的verbose在您将其传递给b的构造函数之前从未初始化,该构造函数将其数据成员分配给它

对于未来,我建议首先切换到C++11强类型枚举,然后阅读枚举是什么以及如何使用它们,因为您似乎很困惑。