Конструктор для производного класса, если базовый класс содержит член с двойным указателем - PullRequest
0 голосов
/ 19 февраля 2020

Я использую член двойного указателя в базовом классе. но в конструкторе производного класса я получаю ошибку

ошибка: нет соответствующей функции для вызова 'Layer :: Layer (tenor &, float &)': Layer (** 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;
}

Как можно решить эту проблему? Как мы можем определить конструкторы, если базовый класс содержит член с двойным указателем?

1 Ответ

1 голос
/ 19 февраля 2020

Вы проходите 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)
{}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...