使用g ++的类中的默认变量

时间:2013-12-03 11:56:49

标签: c++ class constructor

我有一个课程,只能以某种方式进行初始化。作为错误检查的一部分,我有一个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太愚蠢了。

2 个答案:

答案 0 :(得分:1)

对于你的“替代”你错过了一些括号:

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

错误说:

  

错误:声明没有声明任何内容[-fpermissive]   CParameters;

没有括号,它只是一种类型,没有任何声明。使用括号,它是构造函数的原型。

这可能更有意义,如果你想检查正确的构造函数是否只有一个正确的构造函数,那么编译器会发现错误,而不是必须在运行时检查。

... 修改 .... 您还需要在定义中使用括号:

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

答案 1 :(得分:1)

像doctorlove提到的那样,你在构造函数中错过了()。

您无法在课程中指定默认值。你只能在构造函数中完成它。 如果我理解正确,你想要的是:

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

或者,如果参数错误,请将你的ctor扔掉。