boost multidimensional array als Objektvar klappt nicht, als lokale var schon
-
Mir fehlt ein wenig Übung darin.
Bei boost findet sich ein kleines Beispiel zur Nutzung von dem multidimensionalem Array
http://www.boost.org/libs/multi_array/doc/user.html#sec_exampletypedef boost::multi_array<double, 3> array_type; typedef array_type::index index; array_type A(boost::extents[3][4][2]);Klappt problemlos, wenn ich den in irgendeiner Methode meiner Klasse reinkopiere. Wenn ich aber versuche array_type A als Objektvariable in der Klasse zu deklarieren (also diese drei Zeilen code in der .h Datei im private Bereich), so bekomme ich immer die Fehlermeldung:
Fehler 1 error C2061: Syntaxfehler: Bezeichner 'extents'An den includes hab ich nichts geändert, sind genauso wie im Beispiel, wo der Code in einer Methode drin steht, ich weiß nicht, warum extents unbekannt ist, ich hab auch probiert die extend_gen.hpp extra zu inkludieren, aber kein Erfolg
-
De initialisierung (boost::extents...) musst du dann in der Initalisierungsliste eines Konstruktors machen.
Einfach mal googeln

-
Aber da weiß ich die größe noch nicht
-
Hm, ich hab noch Probleme, zum beispiel muss ich beim Aufruf einer Methode ein sauberes multi array haben und versuche den Konstruktor nochmal neu aufzurufen, aber das endet in einer exception, die das System komplett killt.
Klassenvar sieht so aus:
// Array of map typedef boost::multi_array<int, 2> intArray; // Potential map intArray pMap;Und eine Methode, die immer wieder aufgerufen wird, ruft immer
pMap = intArray(extents[n][m]);Auf, die darf nicht lokal sein, weil sie noch wo anders gebraucht wird
-
Wozu gibt's denn Initialisierungslisten?
class test { typedef boost::multi_array<int, 2> intArray; // Potential map intArray pMap; public: test() : pMap(extents[n][m]) {} ... };Wenn du nachträglich die Größe des Arrays verändern willst, solltest du dir mal reshape() und resize() ansehen.
-
Ich sagte ja, ich weiß die Größe zu dem Zeitpunkt nicht, und im Moment hab ich resize verwendet
-
Du kannst Dir das multi_array-Objekt alternativ auch erst anfordern wenn Du es brauchst.