gpt4 book ai didi

c++ - child 的构造函数无法识别基类的成员 : mean, sigma "is not a nonstatic data member or base class"

转载 作者:行者123 更新时间:2023-11-28 05:52:23 26 4
gpt4 key购买 nike

如果创建的对象变得统一,子类“RandomUniform”中的构造函数旨在重新初始化母类“RandomVar”的成员“mean”和“sigma”。但是我得到了错误:意思是,西格玛“不是非静态数据成员或基类”。据我了解,所有在基类中声明构造的成员都必须在子类中作为静态成员重新声明和重构(重新初始化)(与变量“uplimit”和“downlimit”没有区别),这是继承的最佳想法。那么问题是什么?

这是我找到的最佳答案:c++ Child class Unable to initialize Base class's member variable?但是“这是因为基类(以及扩展的,它的所有数据成员)在派生类及其任何成员之前初始化”这句话对我来说并不清楚。构造函数不是用于重新初始化变量,即使它之前已经完成了吗?

PS:我使用符号 RandomVar::RandomVar() 作为下面的代码,以准确显示这些方法是如何在 cpp 文件中编写的。

class RandomVar{

public:

double mean;
double sigma;

RandomVar();
virtual ~RandomVar();
};

RandomVar::RandomVar() : mean(0), sigma(1) {
}

RandomVar :: ~RandomVar(){
}

class RandUniform: public RandomVar {
protected:
double downlimit;
double uplimit;
public:
RandUniform();
virtual ~RandUniform();

};

RandUniform::RandUniform() : downlimit(0), uplimit(1), mean(0.5), sigma (sqrt(1/12)) {
}

RandUniform :: ~RandUniform(){
}

最佳答案

您只能初始化一次对象。之后你只能分配它们:

RandUniform::RandUniform() : downlimit(0), uplimit(1) 
{
mean = 0.5;
sigma = sqrt(1./12);
}

或者,您可以将基类变量的初始化委托(delegate)给基类构造函数:

//Make it protected if you do not want end user to see it.
RandomVar::RandomVar(double m, double s) : mean(m), sigma(s)
{}

RandUniform::RandUniform() : RandomVar(0.5, sqrt(1./12)), downlimit(0), uplimit(1)
{}

关于c++ - child 的构造函数无法识别基类的成员 : mean, sigma "is not a nonstatic data member or base class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964790/

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