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

时间:2013-12-02 05:48:18

标签: c++ enums

在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;
}

当我正在运行时出现错误“正在使用详细信息而未进行初始化”。 请帮助解决如何删除此错误。

1 个答案:

答案 0 :(得分:1)

你意识到你在三个不同的地方使用了verbose这个词,对吧?枚举值verbose的命名与b函数的参数相同,以及main()中:: 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



如果你想要详细命名枚举值,那么你需要改变另外两个:

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强类型枚举,然后阅读枚举是什么以及如何使用它们,因为你似乎很困惑。