tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
17901
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    LukeS LukeS ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    128
    Hallo zusammen
    Ich versuche ein Array direkt zu beim deklarieren mit Werten zu füllen:
    Code :
    1
    
    float fArray[] = { 0, 0.001, 0.003, 0.01};
    Doch der Copiler (Visual C++ express) gibt mir eine Fehlermeldung.
    Was ist falsch in meinem Code?

    Danke für eure Hilfe!
    LukeS
     

  2. #2
    LukeS LukeS ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    128
    Ich hab den Fehler gefunden. Ich hab das Array in der Header-Datei für meine Klasse deklariert. Danach wollte ich das Array (wie oben beschrieben) im Konstruktor mit Werten füllen. Mir ist jetzt klar, dass es so nicht geht.

    Doch ich hab trotzdem ein Problem:
    Wenn ich das Array nur im Konstruktor erstelle und fülle, ist es in den anderen Methoden der Klasse nicht sichtbar.

    Wie kann ich mein Array im Header deklarieren und dann im Konstruktor mit den Werten füllen? Ich hab vorläfig 126 Werte. Später evtl. mehr. Ich möchte die Werte also nicht einzeln ins Array eingeben.
    gibt es einen effizienten Weg?

    Danke für eure Hilfe!
    LukeS
     

  3. #3
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Du kannst es als "static" deklarieren und dann in der cpp-Datei initialisieren:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // .h
    class CMyClass
    {
    public:
        static float m_fArray[];
    }
     
    // .cpp
    float CMyClass::m_fArray[] = { 0, 0.001, 0.003, 0.01};

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  4. #4
    LukeS LukeS ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    128
    Danke für die Antwort!
    Aber wenn ich das Array als static deklariere, wird es für jedes Objekt, das ich von meiner Klasse erzeuge das selbe sein.
    Vorläufig ist das kein Problem, da ich nur ein Objekt erstelle. Aber es könnte schon noch sein, dass ich mehrere Objekte erzeugen muss.

    Ich habe noch eine Idee: Ich erzeuge das Array in einer Methode und gebe einen Zeiger darauf zurück.
    Ich habs aber nochnicht ausprobiert.

    Danke nochmals für die Hilfe!
    Gruss LukeS
     

  5. #5
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von LukeS Beitrag anzeigen
    Ich erzeuge das Array in einer Methode und gebe einen Zeiger darauf zurück.
    Wird das Array in der Methode mit "float fArray[] = { ... }" erzeugt, gibst du einen Zeiger auf eine lokale Variable zurück, also keine so gute Idee.

    Wenn du das Array für die einzelnen Objekte unterschiedlich haben willst, musst du es außerhalb der Klasse erzeugen und z.B. dem Kontruktor als Parameter übergeben und dann in eine (dynamische) Membervariable kopieren:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    #include <iostream>
    class CMyClass
    {
    public:
        CMyClass(float fArray[])
        {
            m_pfArray = new float[sizeof(fArray)];
            memcpy(m_pfArray, fArray, sizeof(fArray) * sizeof(float)); 
        }
     
        ~CMyClass()
        {
            delete [] m_pfArray;    
        } 
     
        float   *m_pfArray;
    };
     
    int main(int argc, char* argv[])
    {
        float fArray[] = { 0, 0.001f, 0.003f, 0.01f };
     
        CMyClass myClass(fArray);
     
        std::cout << myClass.m_pfArray[0] << std::endl;
        std::cout << myClass.m_pfArray[1] << std::endl;
        std::cout << myClass.m_pfArray[2] << std::endl;
        std::cout << myClass.m_pfArray[3] << std::endl;
     
        return 0; 
    }
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  6. #6
    LukeS LukeS ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    128
    Danke für die Antwort.

    Ich habe mir gedacht, dass ich in einer Methode das Array auf dem Heap erstelle (mit new) und dann einen Zeiger darauf zurückgebe?

    Nur ist dann die Frage wie ich ein Array auf dem Heap erstellen und gerade mit den Werten füllen kann?

    Danke euch allen für die Hilfe!

    Gruss LukeS
     

  7. #7
    LukeS LukeS ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    128
    Es scheint nicht zu funktionieren ein Array auf dem Heap zu erstellen und direkt mit werten zu füllen. Ich nehmn an, dass es daran liegt, dass man es beim Erzeugen eines Arrays auf dem Heap mit einem Zeiger zu tun hat.

    Im Moment genügt mir die Lösung mit static. Der Rest war nur Neugier...

    Danke nochmals euch allen!

    Gruss LukeS
    Geändert von LukeS (05.12.06 um 12:02 Uhr)
     

  8. #8
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von LukeS Beitrag anzeigen
    Nur ist dann die Frage wie ich ein Array auf dem Heap erstellen und gerade mit den Werten füllen kann?
    Gruss LukeS
    Wie's funktioniert, habe ich doch im Codebeispiel gezeigt. Eine Zuweisung "{ .... }" geht in dem Fall nicht. Daher die Zuweisung in einem temporären (lokalen) Array vornehmen und dieses dann komplett mit "memcpy()" auf den im Heap erzeugten Speicher kopieren.
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

Ähnliche Themen

  1. 2-dimensionales Array initialisieren
    Von Nunu008 im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 01.12.09, 08:10
  2. Array direkt in Methodenaufruf initialisieren
    Von Thomas D im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 3
    Letzter Beitrag: 20.04.08, 19:43
  3. was ist hier falsch? array initialisieren
    Von turndevil im Forum Java
    Antworten: 2
    Letzter Beitrag: 10.05.04, 15:07
  4. Array initialisieren
    Von ParadiseCity im Forum Visual Basic 6.0
    Antworten: 6
    Letzter Beitrag: 28.03.04, 11:54
  5. Array initialisieren und Inhalt zählen
    Von Wolfsbein im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 31.03.02, 21:10