类中带有g++的默认变量

Default variables in class with g++

本文关键字:默认 变量 g++      更新时间:2023-10-16

我有一个类,它只能以某种方式初始化。作为错误检查的一部分,我有一个bool quality,我希望它的默认值为零,除非调用了正确的构造函数(然后检查参数以查看它是否被正确调用)。

class CParameters {
    private:
        bool quality = 0;
    //Plus some additional code
};

给我

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
bool quality = 0;
               ^

或者:

class CParameters {
    private:
        bool quality;
    public:
        CParameters;
};
CParameters::CParameters
{
    quality = 0;
}

给我以下错误:

error: declaraion does not declare anything [-fpermissive]
CParameters;
^

备选2:

class CParameters {
    private:
        bool quality;
    public:
        CParameters();
        bool good();
};
CParameters::CParameters()
{
    quality = 0;
}
bool CParameters::good()
{
    return quality;
}

然后称之为

CParameters CLI;
CLI.good();

给出以下错误:

error: request for member 'good' in 'CLI', which is of non-class type 'CParameters()'

编辑:第二个选项是正确的。CParameters()是非类的原因是我太笨了,在编译其他文件时无法真正编译parameters.cpp

对于您的"alternate",您错过了一些括号:

class CParameters {
    private:
        bool quality;
    public:
        CParameters();
    //            ^^^
};

错误显示:

错误:声明不声明任何内容[-fpermission]C参数;

没有括号,它只是一个类型,它什么也不声明。加上括号,这是构造函数的原型。

如果您想检查correct构造函数是否被调用为只有一个正确的构造函数,那么编译器可能会发现错误,而不必在运行时进行检查。

编辑。。。。定义中还需要括号:

CParameters::CParameters()
//                     ^^^^
{
    quality = 0;
}

就像前面提到的doctorlove一样,您在构造函数中错过了()。

不能在类中指定默认值。只能在构造函数中执行。如果我理解正确的话,你想要的是这样的东西:

CParameters::CParameters () : quality(false)
{
//your checking
quality = true;
}

或者,如果参数错误,请执行ctor抛出。