Почему 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 Почему так ?? и как это исправить?
Проблема в том, что в вашем коде вы не инициализируете указатель "d" в классах Neuron, Layer, Weight, Net. Поэтому указатель this->d равен NULL в момент вызова метода getD().
Чтобы исправить это, вам нужно инициализировать указатель "d" в конструкторах этих классов. Например, вы можете передавать объект класса Data в конструкторы Neuron, Layer, Weight, Net и сохранять его в указателе "d".
Проблема в том, что в вашем коде вы не инициализируете указатель "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.