Kann ich das so deklarieren?
-
Hallo Ihr,
hm, ich habe eine klasse in der ich folgendes deklarieren möchte:
class DataReader { protected: double totalExtendFile, segmentLength, totalNoSegments, t_0, t_n, byteOffset; int noSensors; int readSensors[noSensors]; char fileName; };Die Klasse soll Daten aus einem Binary-File lesen und benötigt dazu diese Parameter. Meine Frage bezieht sich auf den Teil:
int noSensors; bool readSensors[noSensors];noSensors gibt mir die Anzahl mir die Anzahl aller Meßpunkte in meinem Datenfile an. readSensors ist ein Vektor der genauso viele Felder haben soll wie es Meßpukte gibt. Er soll alle Meßpunkte enthalten die tatsächlich gelesen werden sollen.
Zum Beispiel:
noSensors = 4 //es gibt insgesamt 4 Meßpunkte
readSensors = [0,0,1,1] //es soll der 3. und der 4. Messpunkt gelesen werdenHm, wo ich das hier gerade so aufschreibe, frage ich mich, warum ich dann nicht einfach so was mache
int readSensors[?]
readSensors = [3,4]
Das ? ist also das Problem, da ich ja nicht vorher weiß, wieviele Meßpunkte gelesen werden sollen. Auf der anderen Seite: ich könnte ja noch ein Parameter abfragen, der mir sagt wieviele abgefragt werden sollen. Vielleicht versuche ich das mal. Das Problem bleibt aber, kann ich in den Vektor die Variable schreiben:int n //Anzahl der Meßpunkte die gelesen werden sollen
int readSensors[n]Wenn jemand noch eine andere Idee hat, oder was zu meiner Idee anzumerken hat, würde ich mich über ein Kommentar freuen.
Viele Grüße
Eure Tranquillity
-
Nein, so wie du das machen willst geht es nicht. Du musst eine konstante Größenangabe für dein Array angeben. Drum verwendet du am besten einfach std::vector< T >.

-
Nein, das geht nicht - die Arraygröße muß zur Compilezeit feststehen. Wenn du die Größe erst zur Laufzeit kennst, nimm lieber einen vector<> für die Daten (oder im Notfall einen Pointer, dessen Speicher du beim Einlesen reservierst).
-
Hmhmhm *nachdenklichsei*
Also die Parameter werden an die Klasse ja schon fertig übergeben, d.h. eigentlich ist der Vektor ja schon da, ich will sie ja nur intern zur Weiterverarbeitung speichern. Ach moment mal, eigentlich muss ich das ja gar nicht, oder?
Verlagert sich das Problem auf den Ort, wo der Array erstellt wird. Gibt es nicht so was wie einen dynamischen Array? Oder ich nehme einen "zu großen" Array, fülle ihn von vorne auf und schneide hinten alle leeren Felder ab. Geht so was?
Liebe Grüße
Tranquillityps: ach wenn's doch python oder java wär
, leider muss es in c++ sein und ich kenne mich da noch nicht so gut aus
-
Tranquillity schrieb:
Hmhmhm *nachdenklichsei*
Also die Parameter werden an die Klasse ja schon fertig übergeben, d.h. eigentlich ist der Vektor ja schon da, ich will sie ja nur intern zur Weiterverarbeitung speichern. Ach moment mal, eigentlich muss ich das ja gar nicht, oder?
Wenn die Parameter erst beim Erzeugen eines DataReader-Objekt's bekannt sind, ist das trotzdem zu spät für den Compiler
Der will die korrekte Arraygröße wissen, lange bevor du überhaupt ans Erzeugen von Objekten denkst.Gibt es nicht so was wie einen dynamischen Array?
Ja, das gibt es - es nennt sich std::vector<>

-
Muss ich mal nachgucken was es damit aufsich hat...schon mal danke

-
So, ich habe jetzt was gefunden und zwar:
n = wieviele Meßpunkte lesen?
vector = (int*)malloc(n*sizeof(int))
...verarbeite vectorfree(vector)
Ist das zu umständlich?
LG
Tranquillity
-
Tranquillity schrieb:
n = wieviele Meßpunkte lesen?
vector = (int*)malloc(n*sizeof(int))
...verarbeite vectorfree(vector)
Ist das zu umständlich?
Ja!
vector<int> vec(n); // … verarbeite vec.… das ist wohl eindeutig einfacher. ('std::vector' befindet sich im Header <vector>.)
-
Muss der dann nicht mehr deallokiert werden?
-
Tranquillity schrieb:
Muss der dann nicht mehr deallokiert werden?
Nein, muss nicht. Das macht die Klasse automatisch für Dich.
-
Ich danke euch *verneig*bis bald
viele Grüße
Tranquillity