0
嗨,我是一個初學者級別的程序員,我遇到了一個我一直在研究的程序的問題。重點是創建一個單獨的類,該類具有由隨機生成的數字組成的數組作爲一個私有變量,該數組的大小以及通過使用該數組來表示該個體的適應度的數字。程序觸發斷點;不運行
它利用頭文件,頭文件的源文件和源文件來測試頭文件。出於某種原因,每當我嘗試編譯時我都會遇到一個斷點,Visual Studio也不會告訴我錯誤是什麼。我懷疑它與我班的私人指針有關,但我不知道爲什麼或如何修正錯誤。
頁眉
#ifndef INDIVIDUAL_H
#define INDIVIDUAL_H
class individual
{
int size;
double fitness;
double* genotype;
public:
individual(int pSize = 10);
individual(const individual& copy);
~individual();
double* getGenotype();
double getFitness();
int getSize();
void mutation();
void crossover(individual a);
};
#endif
頁眉源
#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>
#define M_PI 3.14159265358979323846
#define M_E 2.71828182845904523536
#include <cmath>
#include "individual.h"
using namespace std;
double RandomFloat(double min = -32.768, double max = 32.768)
{
min = min;
max = max;
unsigned int seed;
seed = (unsigned int) time(0) + rand();
srand(seed);
double r = (double)rand()/(double)RAND_MAX;
return min + r * (max - min);
}
double Fitness(double a[], int size)
{
double fitness;
double firstSum, secondSum;
firstSum = 0;
for(int i = 0; i<size; i++)
{
firstSum += a[i]*a[i];
}
firstSum /= size;
secondSum = 0;
for(int i = 0; i<size; i++)
{
secondSum += cos(2*M_PI*a[i]);
}
secondSum /= size;
fitness = -20*exp(-0.2*sqrt(firstSum) - exp(secondSum) + 20 + M_E);
return fitness;
}
individual::individual(int pSize)
{
size = pSize;
genotype = nullptr;
genotype = new double(size);
for(int i = 0; i<size; i++)
{
genotype[i] = RandomFloat();
}
fitness = Fitness(genotype,size);
}
individual::individual(const individual& copy)
:size(copy.size),genotype(new double[copy.size])
{
std::copy(copy.genotype, copy.genotype + copy.size, genotype);
}
individual::~individual()
{
delete[] genotype;
}
double* individual::getGenotype()//returns a pointer
{
return genotype;
}
double individual::getFitness()
{
return fitness;
}
int individual::getSize()
{
return size;
}
void individual::mutation()
{
int first, second;
double temp;
first = (int)RandomFloat();
second = (int)RandomFloat();
temp = genotype[first];
genotype[first] = genotype[second];
genotype[second] = temp;
}
void individual::crossover(individual a)
{
int crossPoint = size/3 - 1;
for(int i = crossPoint; i<size; i++)
{
double temp1;
temp1 = 0;
temp1 = genotype[i];
genotype[i] = a.genotype[i];
a.genotype[i] = temp1;
}
}
驅動源
#include <iostream>
#include <string>
#include <stdlib.h>
#include <cmath>
#include <vector>
#include "individual.h"
#define M_PI 3.14159265358979323846
#define M_E 2.71828182845904523536
using namespace std;
int main()
{
individual test;
int size = test.getSize();
cout << size << endl;
for(int i = 0; i<size; i++)
{
cout << test.getGenotype()[i] << endl;
}
return 0;
}
我試圖尋找可能的解決方案(添加的拷貝構造函數和析構函數)和似乎沒有任何解決問題。 任何幫助將不勝感激。