我有一个课程,只能以某种方式进行初始化。作为错误检查的一部分,我有一个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太愚蠢了。
答案 0 :(得分:1)
对于你的“替代”你错过了一些括号:
class CParameters {
private:
bool quality;
public:
CParameters();
// ^^^
};
错误说:
错误:声明没有声明任何内容[-fpermissive] CParameters;
没有括号,它只是一种类型,没有任何声明。使用括号,它是构造函数的原型。
这可能更有意义,如果你想检查正确的构造函数是否只有一个正确的构造函数,那么编译器会发现错误,而不是必须在运行时检查。
... 修改强> .... 您还需要在定义中使用括号:
CParameters::CParameters()
// ^^^^
{
quality = 0;
}
答案 1 :(得分:1)
您无法在课程中指定默认值。你只能在构造函数中完成它。 如果我理解正确,你想要的是:
CParameters::CParameters () : quality(false)
{
//your checking
quality = true;
}
或者,如果参数错误,请将你的ctor扔掉。