# Arrays mehreren Werte "gleichzeitig" zuweisen



## Padawan (27. Februar 2017)

Hallo Leute,

es ist ja an sich möglich Arrays folgenderweise zu Initialisieren:

```
int myArray[12] = {1, 4, 7, 8, 9, 10, 87, 22, 34, 8, 14, 48};
```

Ist es möglich Werte einem schon bestehenden Array folgendermaßen zu setzen:

```
int myArray[12];
myArray = {1, 4, 7, 8, 9, 10, 87, 22, 34, 8, 14, 48};
```

Ich würde mich auf eure Antworten freuen.

Lg
Padawan


----------



## vfl_freak (27. Februar 2017)

Moin,

zwischen beiden Varianten besteht doch kein Unterschied !?!?

Gruß Klaus


----------



## Padawan (27. Februar 2017)

Hi,

bei mir schmeisst der Compiler Fehlermeldungen raus, wenn ich die 2. Variante mache:

```
||=== Build: Debug in Test (compiler: GNU GCC Compiler) ===|
/home/TestCodes/Test/main.cpp||In function ‘void output_array()’:|
/home/TestCodes/Test/main.cpp|21|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11|
/home/TestCodes/Test/main.cpp|21|error: assigning to an array from an initializer list|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
```

Die Fehlermeldung erschien zum folgendem Code:

```
#include <iostream>

const int Fields = 12;
void output_array();


using namespace std;

int main()
{
    output_array();
    cout << "Hello world!" << endl;
    cin.get();
  
    return 0;
}

void output_array()
{
   double Probabilities[12];
   Probabilities = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.11, 0.12, 0.13};

   for(int i = 0; i < Fields; i++)
   {
        cout<<i<<". field:  "<< Probabilities[i]<<endl;
   }
}
```

Daher auch meine frage.
Ich würde mich freuen, wenn du /ihr mir weiter helfen könntet.

Lg
Padawan


----------



## cwriter (27. Februar 2017)

Padawan hat gesagt.:


> Daher auch meine frage.
> Ich würde mich freuen, wenn du /ihr mir weiter helfen könntet.


Die Fehlermeldung sagt es eigentlich schon:
"warning: extended initializer lists only available with -std=c++11 or -std=gnu++11".
Füge deinem makefile das -std=c++11 an (oder setze es in der IDE) und das Problem müsste behoben sein.

Es sei zudem noch angemerkt, dass du bei Probabilities die Grösse entsprechend mit der Konstanten Fields angeben solltest. Zudem macht es in deinem Fall nicht viel Sinn, die Definition nicht schon zu Beginn auf den Array anzuwenden.

Gruss
cwriter


----------



## vfl_freak (28. Februar 2017)

Moin,

mal abgesehen von dem, was @cwriter schrieb ...

wenn


Padawan hat gesagt.:


> ```
> double Probabilities[12] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.11, 0.12, 0.13};
> ```


funktioniert, warum nutzt Du es dann nicht ???
Die zweizeilige Schreibweise ist IMHO eh' Quark !

Gruß Klaus


----------



## Padawan (28. Februar 2017)

Hi,


vfl_freak hat gesagt.:


> Moin,
> 
> funktioniert, warum nutzt Du es dann nicht ???
> Die zweizeilige Schreibweise ist IMHO eh' Quark !
> ...



Weil beim zweiten die Variable nicht im Scope wäre, wo ich es benutze und der Array feste Werte hat.

Hab die definition in den Header gepackt, wo ich es benutze.

Lg Padawan


----------



## cwriter (28. Februar 2017)

Padawan hat gesagt.:


> Weil beim zweiten die Variable nicht im Scope wäre, wo ich es benutze und der Array feste Werte hat.


Verstehe ich nicht - funktioniert es denn jetzt?
"Feste Werte": Ist ja nicht const? Da kannst du noch reinschreiben. Und wenn du z.B. den Array durch verschiedene if-Verzweigungen jagen und dort den jeweils passenden Wert setzen willst, dann wäre es wohl praktischer, würdest du deine möglichen Folgen als konstante int-Arrays definieren (sodass es ins .data-Segment kommt) und dann statt eines Stackarrays einen Pointer auf den Beginn der jeweiligen Blöcke zu haben (ist effizienter für die Maschine).

cwriter


----------



## sheel (28. Februar 2017)

Variablen im Header?
Sobald du den header in mehr als eine cpp-Datei einbindet, gehts nicht mehr.
...
Siehe extern.


----------

