Martin >> Nej, det har jeg ikke gjort, jeg vidste ikke det var nødvendigt - og det var årsagen til mine fejlmeddelelser. Tak! Min umiddelbare intuition ville have været at bruge en initialization list, men det virker tilsyneladende ikke.
Brian >> Nej du har på en måde ret, jeg kan bare ikke gennemskue hvad der er den bedste måde at designe det på OOP. Så vidt jeg kan forstå foreslår du:
class Map {
private:
std::vector<std::vector<bool> > domain;
std::vector<Species> species_list;
// etc..
};
Problemet er Species helst skal kende kortet; f.eks. når jeg udskriver, kalder jeg:
for (i...)
for (j...)
if (!domain[i][j]) file >> no_data;
else file >> speciesmap[i][j];
}
}
Dvs species skal kende Map::domain. Jeg kan ikke gennemskue hvordan en Species kan kende en værdi af en klasse den er en del af? hvis jeg skrev 'map.domain' kan jeg ikke styre hvilket map der er tale om (når det er static er det selvfølgelig tvunget til at være det samme hele programmets varighed, så det er måske heller ikke ideelt). Eller skal jeg måske bruge ::domain ?
Jeg er også lidt bekymret for kompartmentalisering - jeg kunne selvfølgelig bruge
bool Map::getDomain(int x, int y){ return domain[x][y];}
men jeg er bekymret for om det virker tungt (mit kort er 200*100 celler)?
Jeg er i det hele taget lidt optaget af performance, for mit datasæt er på 4000 arter med hver et kort bestående af 20.000 celler - dvs 80 millioner dataposter som der skal holdes styr på (det er derfor jeg bruger vector<bool>
.
Som du kan høre er problemet at jeg ikke helt har forstået OOP, og jeg synes ikke jeg kan komme videre med det ved at kigge i bøger.
Hvad angår din forslag tror jeg faktisk det er det jeg gør.
Et low-res Map over Danmark ville se sådan ud:
0001000000
0011100000
0111110110
0111000111
0011000110
og så gør jeg det tilsvarende for hver art: indlæser alle informationer i en vector<vector<bool>>, der så ligger over hinanden. index [] er så koordinatet. Eller var det ikke helt det du mente?
Venter spændt på svar, tak for I gider kigge på det
Indlæg senest redigeret d. 14.09.2007 12:19 af Bruger #8249