?
Das mit der veränderten Ini-liste ist super, klar, das gibt weniger Aufwand und kein unnötiges kopieren. Hab ich so eingebaut.
Das Initialisieren der Member erfolgt teilweise in der Methode setHeader(), diese grieft dazu auf eine Datei zu, in der die meisten benötigten Werte stehen. Dort erfahre ich auch erst die notwendige Größe für T *data, deswegen wird es im std-ctor nicht schon erzeugt. Ein mit std-ctor erzeugtes Grid soll so nicht verwendet werden, ich dachte, daß die "Komplettierung" über eine spätere Zuweisung von Grids möglcih wäre á la
Grid<int> arealGrid = Grid<int>();
arealGrid = Grid<int>(Controller* x);
?
Eine Umwandlung eines Grid-typs in einen anderen ist tatsächlich nicht geplant.
Ich habe jetzt festgestellt, daß der ctor Grid(Controller*) (war vorher noch ein jetzt überflüssiger string mit drin) immer den richtigen Typen auswählt, der std-ctor aber nicht. Wenn ich Grid(Controller*) jetzt immer in der ini-liste aufrufe, funktioniert das soweit, weiß der Geier warum. Aber:
Execution::Execution(Controller* mC):
arealGrid(mC),
storPercGrid(mC),
inputGrid(mC),
evapGrid(mC){
arealGrid = arealGrid;
...}
Wenn er die Zuweisung erreicht, zeigt er brav zwei Grid<int> an. Wenn er in den Operator springt, sieht er plötzlich zwei Grid<float>!
Also eigentlich noch das gleiche Problem! Wonach entscheidet sich denn, welcher Operator aufgerufen wird? Ich dachte, nach dem Typen, auf den er angewendet wird? Offensichtlich hat es auch noch was mit dem Inhalt der Methode (bzw. Konstruktor, Operator) zu tun?
Stimmt da was mit dem =Operator nicht? Sieht so aus:
template<typename T>
Grid<T> &Grid<T>::operator=(const Grid<T> & rhs){
/* '=' operator to write something like:
Grid grid1 = Grid();
grid1 = grid2 */
if (this != &rhs){
this->gridCont = rhs.gridCont;
this->xSize = rhs.xSize;
this->ySize = rhs.ySize;
this->xllcorner = rhs.xllcorner;
this->yllcorner = rhs.yllcorner;
this->cellsize = rhs.cellsize;
this->noData = rhs.noData;
delete [] this->data;
this->data = 0;
if (rhs.data != 0){
this->data = new T[rhs.xSize * rhs.ySize];
for (int y = 0; y < rhs.ySize; y++){
for (int x = 0; x < rhs.xSize; x++){
this->data[y * rhs.xSize + x] = rhs.data[y * rhs.xSize + x];
}
}
}
}
return *this;
}
ich bin weiter dankbar für alle Vorschläge!
Uwe