gpt4 book ai didi

c++ - g++ 类中的默认变量

转载 作者:行者123 更新时间:2023-11-28 03:02:44 25 4
gpt4 key购买 nike

我有一个只能以某种方式初始化的类。作为错误检查的一部分,我有一个 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。

最佳答案

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

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

错误说:

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

没有括号,它只是一个类型,没有声明任何内容。带括号的是构造函数的原型(prototype)。

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

....编辑....您还需要在定义中使用方括号:

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

关于c++ - g++ 类中的默认变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com