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 < this->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 < this->getD()->piQuantNInLayer[iCount]; i++) { // пробегается по нейронам
dBuffer = 0;
for (int j = 0; j < this->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 < iCount; i++)
pdOutData[i] = (this->*(this->dfActivate))(pdInData[i]);
return pdOutData;
}
Data * neural_network_lib::DataCl::getD()
{
return this->d;
}
При вызове фугкции Think(); когда выполнение доходит до getD() внутри функции pdfPrioriti, то в getD() this равна NULL
Почему так ?? и как это исправить?