[C++11] Syntax für Uniform Initialisation

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

[C++11] Syntax für Uniform Initialisation

Beitrag von Schrompf »

Moin,

kurze Frage: ich würde gern ein Rudel float[4] in ein std::array packen. Leider schimpft VS2013 über meinen Initialisierungssyntax. Hat der Compiler Recht oder hab ich Recht?

Ich so:

Code: Alles auswählen

static const std::array<float[4], 9> GrafikTeile = 
  {
    { 0, 0, 544, 353 },
    { 63, 237, 116, 92 },
    { 85, 157, 119, 113 },
    { 110, 103, 99, 88 },
    { 191, 109, 105, 78 },
    { 82, 41, 122, 97 },
    { 186, 52, 125, 66 },
    { 290, 59, 130, 115 },
    { 372, 58, 109, 88 }
  };
und darauf der Compiler so:

Code: Alles auswählen

1>c:\projekte\splatter\source\spiel\sammelobjektanzeige.cpp(25): error C2078: Zu viele Initialisierungen
Sollte nur ein schnelles MerkDirMalDieseZahlen werden, aber ich kriege das dem Compiler nicht vermittelt. Stimmt das so?

Danke!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: [C++11] Syntax für Uniform Initialisation

Beitrag von mnemonix »

Code: Alles auswählen

const std::array<float [4], 9> GrafikTeile =
{
    // float (std::array<float [4], 9>::elems[9]) [4]
    {
        {0, 0, 544, 353 },
        {63, 237, 116, 92 },
        {85, 157, 119, 113 },
        {110, 103, 99, 88 },
        {191, 109, 105, 78 },
        {82, 41, 122, 97 },
        {186, 52, 125, 66 },
        {290, 59, 130, 115 },
        {372, 58, 109, 88}
    }
};
So sollte es funktionieren, da du ja eigentlich einen simplen POD mit nur einem Member (float (std::array<float [4], 9>::elems[9]) [4]) initialisieren willst. std::array hat keinen speziellen Konstruktor.
Zuletzt geändert von mnemonix am 21.03.2014, 19:13, insgesamt 1-mal geändert.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [C++11] Syntax für Uniform Initialisation

Beitrag von Schrompf »

Zwei std::array ineinandergeschachtelt. Gute Idee, danke!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: [C++11] Syntax für Uniform Initialisation

Beitrag von mnemonix »

Uuups, sorry. Das war ein Versuch/Kopie aus meinem VS2013, habe es wieder deinem Beispiel nach umgeändert. Aber std::array<std::array<float, 4>, 9> ist äquivalent dazu.

EDIT: Alternativ kannst du auch alle inneren geschweiften Klammern entfernen. Finde ich aber persönlich nicht so schön.
Antworten