Werte in ein Array schreiben

Verschiedenes zu Qt
Antworten
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Werte in ein Array schreiben

Beitrag von Qt-nator »

Hi,

ich hab folgenden Code der einwandfrei funktioniert und mir das Richtige ausgibt:

Code: Alles auswählen


else if(strLine.startsWith("[binary_section]"))
    {  
      ImportExport::nAnzahl = (ImportExport::nSizeV * ImportExport::nSizeU); 

      ImportExport::fBinaryArray[ImportExport::nAnzahl];

      QDataStream out(&file);

      float hutze;

      while(!file.atEnd())
      {  
        for(int i = 0; i <ImportExport::nAnzahl; i++)
        {
          out >> hutze;   

          qDebug() << QString::number(hutze); 

          qDebug() << i;

          //ImportExport::fBinaryArray[i] = hutze;
        }
      }      
    }

Aber wenn ich diesen Code das Hinzufüge:

Code: Alles auswählen

ImportExport::fBinaryArray[i] = hutze;
Dann stürzt das Programm ab.

Meine Frage jetzt ist das hier sofort ersichtlich oder müsste das so stimmen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was soll

Code: Alles auswählen

ImportExport::fBinaryArray[ImportExport::nAnzahl]; 
machen?

Wie ist ImportExport::fBinaryArray überhaupt definiert?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Benutz lieber Vectoren.
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Definiert ist es so:

ImportEport.h

Code: Alles auswählen

  private:  

static float fBinaryArray[];
Und machen soll es:

Mir ein Array mit der Größe ImportExport::Anzahl erstellen.

Ja Vector hätte ich auch lieber genommen ... aber verlangt ist halt Array.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Du kannst einen statischen Array aber nicht zur Laufzeit die Größe definieren.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Mal ne frage, welche Programmiersprache ist das ? ^^

-- ImportExport::nAnzahl = (ImportExport::nSizeV * ImportExport::nSizeU);
warum die klammern ?

-- ImportExport::fBinaryArray[ImportExport::nAnzahl];
was soll diese anweisung machen ? du referenzierst (wahrscheinlich) die erste adresse nach dem Array und tust damit gar nix ?

-- QDataStream out(&file);
out ? Suggeriert die tatsache, das du ueber diesen datenstrom was ausgeben willst ?

-- while(!file.atEnd())
warum fragst du dann die Position ab ?

-- out >> hutze;
Ahja, es ist nen eingabestrom :-) nenn es lieber in dann !

-- //ImportExport::fBinaryArray = hutze;
wenn das ned funktioniert, wuerd ich mich mal um den status des Arrays kuemmern ... ist das ordnungsgemaes allociert wurden ?
wie wurde das angelegt ? dynamisch / statisch .....

-- ImportExport::
ist das nen namespace, oder versteckst du variablen statisch hinter ner klasse ?

Ciao ....
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Meine Variablen sind static:

ImportExport.h

Code: Alles auswählen


 private:  

    static double dVersion;

    static QString strDescription;

    static QString strUnit;

    static int nSizeU;

    static int nSizeV;

    static double dColorMapLowerLimit;

    static double dColorMapUpperLimit;

    static int nNumberOfPhases;

    static float fBinaryArray[];

    static int nAnzahl;

Code: Alles auswählen

ImportExport::fBinaryArray[ImportExport::nAnzahl];
Soll mir eigentlich das Array so groß machen wie nAnzahl. Du sagst das geht nicht ... da könnte ja dann auch der fehler liegen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Qt-nator hat geschrieben: Soll mir eigentlich das Array so groß machen wie nAnzahl. Du sagst das geht nicht ... da könnte ja dann auch der fehler liegen.
Deshalb mal wieder unser Hinweis - kauf dir ein C -Buch und lerne erstmal die Grundlagen - das ist Basic C...

btw: Ich hätte ne QList<> benutzt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Ich hätte auch was anders benutzt wenn ich könnte...

Aber ich brauch nunmal ein Array.

Muss doch auch mit dem Array umzusetzen sein.

wenn ich mir ein Neues Array erstelle

Code: Alles auswählen

      int Anzahl = (ImportExport::nSizeV * ImportExport::nSizeU);

      float fArray[Anzahl];
krieg ich fehlermeldungen...

ImportExport.cpp(115): error C2057: Konstanter Ausdruck erwartet

ImportExport.cpp(115): error C2466: Reservierung eines Arrays der konstanten Größe 0 nicht möglich

ImportExport.cpp(115): error C2133: 'fArray': Unbekannte Größe

Bei meinem static Array aber nicht woran liegt das???
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Qt-nator hat geschrieben:

Code: Alles auswählen

ImportExport::fBinaryArray[ImportExport::nAnzahl];
Soll mir eigentlich das Array so groß machen wie nAnzahl. Du sagst das geht nicht ... da könnte ja dann auch der fehler liegen.
Das geht aber nicht zur Laufzeit.. Und weil du es eben nicht vorher definierst, ist die Größe 0. Und wenn du dann etwas versuchst hinzuzufügen an einer nicht existierenden Stelle, dann raucht es ab weil du auf fremden Speicher schreiben willst.

Ich stimme Christian zu, kauf dir ein C-Buch (besser C++, da du ja offensichtlich C++ benutzen willst). Und warum darfst du keinen Vector benutzen? Du benutzt C++, darfst aber nicht die STL benutzen? Das ist eine ziemlich dämliche Beschränkung.


Edit:
Bei deinem Static-Array kommt as nicht, weil du keine Größe definierst. Da du es aber zur Compile-Zeit nicht füllst, ist die Größe des Arrays eben 0. Das kannst du zur Laufzeit auch nicht mehr ändern.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

warum sind die ganzen dinger static ?
Soll mir eigentlich das Array so groß machen wie nAnzahl. Du sagst das geht nicht ... da könnte ja dann auch der fehler liegen.
tuerlich geht das, nur ned so :-)

der C weg:

int size = 256;
float * myArray = malloc(size * sizeof(float));

// und freigeben nie vergessen !
free(myArray);

Nun koennte man davon ableiten, das der c++ weg folgender waere

int size = 256;
float * myArray = new float[size];
// und freigeben ned vergessen
delete[] nyArray;

Aber versuch es gar ned erst.
C++ ist :

int size = 256;
std::vector<float> myArray(size,0.0); // und gleich mit der richtigen groesse allocieren und alle elemente mit 0.0 belegen

// freigeben tut der zum glueck allein ^^

Unter qt gibts noch QVector, ich wuerd aber std::verctor empfehlen ...

Klassendesign ???
Also irgendwas ist da noch recht merkwuerdig :-)
Wenn du eh ne klasse hasst, solltest du sowieso ned auf die members direkt zugreifen lassen, sondern kapseln. Sowei man alle initialisierungen im konstruktor gemacht werden koennten ....

weiterhin bezweifle ich das die sache mit den static elementen da son sein sollte ....

Ciao ...
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Ich habs jetzt so gemacht:

Code: Alles auswählen


 else if(strLine.startsWith("[binary_section]"))
    {  
   
      QDataStream out(&file);

      float hutze;

      int size = (ImportExport::nSizeV * ImportExport::nSizeU);
      
      std::vector<float> myArray(size,0.0); 

      while(!file.atEnd())
      {  
        for(int i = 0; i < size; i++)
        {
          out >> hutze;   

          myArray[i] = hutze;
        }
      }      
    }

so funkts auch... Aber ist das mit einem Array nicht zu Lösen?? ist ja jetzt ein Vector???

so gehts ^^

Code: Alles auswählen


float *Array = new float[size];

Antworten