如果基类包含双指针成员,则派生类的构造函数

Constructore for derived class if base class contain double pointer member

本文关键字:派生 构造函数 基类 包含双 指针 成员 如果      更新时间:2023-10-16

我在基类中使用双指针成员。但是在派生类构造函数中,我得到错误

错误:没有用于调用"Layer::Layer(tensor&,float&("的匹配函数:层(**tn,**input(

// base class
class Layer
{
protected:
struct tensor **tensor_node;
float **tensor_input_activation;
public:
/*  ***Constructor*** */
Layer(struct tensor **, float **);
};
Layer::Layer(struct tensor **tn, float **input)
{
*tensor_node = *tn;
*tensor_input_activation = *input;
}
// derived class from Layer
class BatchNormalization : public Layer
{
string layer_name;
public:
/* ***Constructor*** */
BatchNormalization(struct tensor **, float **, string);
/* ***Member_function*** */
float* batch_normalization_operation_function();
};
BatchNormalization::BatchNormalization(struct tensor **tn, float **input, string l_name)
:Layer(**tn, **input)
{
layer_name = l_name;
}

如何解决这个问题?如果基类包含双指针成员,我们如何定义构造函数?

您通过了Layer(tn, input)。但在此之前,您应该修复Layer::Layer以停止取消引用无效指针。

Layer::Layer(tensor **tn, float **input)
: tensor_node(tn), tensor_input_activation(input)
{}
BatchNormalization::BatchNormalization(tensor **tn, float **input, string l_name)
: Layer(tn, input), layer_name(l_name)
{}