# Array initialisieren



## LukeS (2. Dezember 2006)

Hallo zusammen
Ich versuche ein Array direkt zu beim deklarieren mit Werten zu füllen:

```
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


----------



## LukeS (2. Dezember 2006)

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


----------



## MCoder (3. Dezember 2006)

Du kannst es als "static" deklarieren und dann in der cpp-Datei initialisieren:


```
// .h
class CMyClass
{
public:
    static float m_fArray[];
}

// .cpp
float CMyClass::m_fArray[] = { 0, 0.001, 0.003, 0.01};
```

Gruß
MCoder


----------



## LukeS (3. Dezember 2006)

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


----------



## MCoder (4. Dezember 2006)

LukeS hat gesagt.:


> 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:

```
#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


----------



## LukeS (4. Dezember 2006)

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


----------



## LukeS (5. Dezember 2006)

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


----------



## MCoder (5. Dezember 2006)

LukeS hat gesagt.:


> 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


----------

