Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Structur erstellen aus Anzahl Elementen aus binärer Datei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.12.2006, 14:13 Uhr
~snowgarden
Gast


Hallo zusammen,

ich möchte gerne eine Binäredatei auslesen. Dies hat mal geklappt im untenstehenden Beispiel. In den Header der Binardatei sind die Metadaten gespeichert, unter anderem die Anzahl nachfolgender Farbenfelder (haben alle die gleiche Struktur).
Nun möchte ich mit der count Variable ein Array von der Struktur COLOUR mit dem Index count. Leider funktioniert dieses nicht.

Worin habe ich eine falsche Überlegung gemacht?
Kann es sein, dass das Array nur konstante Werte entpfangen kann. Gibt es da eine Möglichkeit, dies zu umgehen?
Besten Dank

Snow


C++:
#include <iostream>
#include <fstream>

using namespace std;

struct META_COLOUR
{
    unsigned short int version;
    unsigned short int count;
};

struct COLOUR
{
    unsigned short int spacer;
    unsigned short int red;
    unsigned short int green;
    unsigned short int blue;
    unsigned short int spacer2;
};

int main() {  
    fstream File("wonderland.aco", ios::in|ios::binary);
    if (File.is_open())
    {
        META_COLOUR gr_meta;
        File.read((char*)&gr_meta, sizeof(gr_meta));
        int foo = gr_meta.count;
        
        COLOUR gr_colour[foo];
    }
    else {
        cout << "geht nicht";
    }
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.12.2006, 11:47 Uhr
Th



Du kannst in C++ kein konstantes Array mit einer Variable als Index erzeugen, d.h.
entweder du erzeugst ein Array auf dem Heap

C++:
COLOUR *gr_colour = new COLOUR [foo];
...
delete gr_colour;


oder du benutzt z.B. std::vector oder std::list.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.12.2006, 12:08 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von Th:
Du kannst in C++ kein konstantes Array mit einer Variable als Index erzeugen,

Doch nach dem neuen Standard geht das, aber der wird wohl von den meisten Compilern noch nicht unterstützt. Deshalb muss man es so machen wie du sagst und ich persönlich finde es so auch schöner
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.12.2006, 12:28 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Das geht auch so, aber nur, wenn die Variable zur Kompilierzeit bekannt ist und als const deklariert wurde

C++:
const int foo = 5;
char bla[foo];

Aber vector bzw. list ist viel viel viel viel schöner
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.12.2006, 13:00 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nein eben nicht. Es muss nicht mehr const sein. Klingt komisch, scheint aber so zu sein
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.12.2006, 13:09 Uhr
Th



Von welchem Standard redest du? In C++ definitiv nicht, aber in Ansi C 99 ist so etwas erlaubt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.12.2006, 13:22 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von Th:
In C++ definitiv nicht, aber in Ansi C 99 ist so etwas erlaubt.

Hmm ja kann sein das ich das verwechselt habe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.12.2006, 13:23 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Na ja, so viele verechseln auch C und C++, da kann man das auch mal verzeihen, wenn man den Standard verwechselt
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.12.2006, 14:25 Uhr
0xdeadbeef
Gott
(Operator)


C99 erlaubt das, und da der nächste C++-Standard (C++0x) auf C99 aufsetzen wird, wird das darin auch erlaubt sein. Im Moment ist es noch nicht standardkonform.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: