, поэтому я знаю, что код правильный
То, что вы "знаете", является ложным.Код неправильный многими способами.Вот только один пример:
for(unsigned int i=0;i<GPNO;i++) //SORTING ACCORDING TO FITNESS
for(unsigned int j=i+1;j<GPNO;j++)
if((gp[i]->fitness)>(gp[j]->fitness))
{
gp[i]->mycopy(tmp);
gp[j]->mycopy(gp[i]);
tmp->mycopy(gp[j]);
}
for(i=1;i<=no;i++)
{
gp[i]->mycopy(gp[GPNO-i]);
}
Во втором цикле for
, i
не объявлен.Я подозреваю, что исходным компилятором был VC6, который позволял это.
Другая проблема - способ, которым вы вызываете pow
.Вы называете это макросами (которые явно злые для этой цели), например:
pf[i].frq+=(unsigned int)pow(2,2*PF-1);
И компилятор не знает, какую версию pow
вы имели в виду.Показательный пример для макросов быть злыми для этой цели.Сделайте это:
pf[i].frq+=(unsigned int)pow(2.0,2*PF-1);
Или еще лучше, избавьтесь от макросов.
Еще один пример того, как ваш код неправильный :
#include "stdlib.h"
#include "conio.h"
#include "math.h"
Ни один из них не является частью Стандарта.Если вы можете заставить их скомпилироваться, это только потому, что ваш компилятор предвидел вашу ошибку.Но это все равно ошибка.