Почему this = NULL? Data *d;
d = new Data;
Neuron *n = new Neuron(b);
n->setD(d);
n->t = 2;
Layer *l = new Layer(n);
l->setD(d);
Weight *w = new Weight();
w->setD(d);
Net *q = new Net();
q->setD(d);
Все кроме Data - экзепляры классов. Data это структура.
Все классы наследуют класс DacaCl :class DataCl
{
public:
void setD(Data*);
Data *getD();
int ifgetQuantLayer();
protected:
Data *d;
};double * neural_network_lib::Net::Think(int start = 0)
{
if (start getD()->iQuantLayer) {
this->getD()->pdIn = this->n->pdfActivate(this->w->pdfPrioriti(this->getD()->pdIn, start), start);
this->Think(++start);
}
return this->getD()->pdIn;
}double * neural_network_lib::Weight::pdfPrioriti(double *pdIn, int iCount/*номер слоя*/) //+
{
double *pdOut = new double[this->getD()->piQuantNInLayer[iCount]]; // массив выходных данный с колличествон ячей равным количеству нейронов в слое iCount
double dBuffer; //временные значения
for (int i = 0; i getD()->piQuantNInLayer[iCount]; i++) { // пробегается по нейронам
dBuffer = 0;
for (int j = 0; j getD()->piQuantNInLayer[iCount - 1]; j++) //пробегается по входным данным для i-того нейрона
dBuffer += this->getD()->pppdWeights[iCount-1][i][j]*pdIn[j]; //перемножает значения полученые в iCoint - 1 слое на вес для j-того входа i-того нейрона iCount-го слоя и суммирует их
pdOut[i] = dBuffer; //вписы вает в массив выходных данных
}
return pdOut;;
}double * neural_network_lib::Neuron::pdfActivate(double *pdInData, int iCount)
{
double *pdOutData = new double[iCount];
for (int i = 0; i *(this->dfActivate))(pdInData[i]);
return pdOutData;
}Data * neural_network_lib::DataCl::getD()
{
return this->d;
}
При вызове фугкции Think(); когда выполнение доходит до getD() внутри функции pdfPrioriti, то в getD() this равна NULL
Почему так ?? и как это исправить?

21 Авг 2019 в 07:01
144 +1
0
Ответы
1

Проблема в том, что в вашем коде вы не инициализируете указатель "d" в классах Neuron, Layer, Weight, Net. Поэтому указатель this->d равен NULL в момент вызова метода getD().

Чтобы исправить это, вам нужно инициализировать указатель "d" в конструкторах этих классов. Например, вы можете передавать объект класса Data в конструкторы Neuron, Layer, Weight, Net и сохранять его в указателе "d".

Пример:

Neuron::Neuron(Data *data) {
this->d = data;
}
Layer::Layer(Neuron *neuron, Data *data) {
this->n = neuron;
this->d = data;
}
Weight::Weight(Data *data) {
this->d = data;
}
Net::Net(Data *data) {
this->d = data;
}

Таким образом, у вас не будет проблем с NULL указателем при вызове метода getD() внутри функции pdfPrioriti.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир