Array als Attribut einer Klasse [gelöst]



  • Ich glaube du hast inkompatible Arrays benutzt, z.b.

    int arr[3][3] = { ... }
    Level<5, 4> l(arr, arr);    // fehler arr hat andere Groesse
    


  • nein hab ich nicht...

    const int width = 10, height = 8;
    Level<width, height> NeuesLevel(map, collision);
    

    geht auch nicht. Hast du es schon mal Compiliert?



  • jannis95 schrieb:

    Bitte sag mir schnell woran das liegt.. 🙂

    Das sagt dir dein Compiler:

    jannis95 schrieb:

    level.cpp:5:1: Fehler: Prototyp für »Level<width, height>::Level(int (*)[(height - 1)], int (*)[(height - 1)])« passt zu nichts in Klasse »Level<width, height>«
    level.h:8:3: Fehler: Kandidat ist: Level<width, height>::Level(int (*)[height], int (*)[height])
    main.cpp: In Funktion »int main(int, char**)«:
    main.cpp:10:39: Fehler: keine passende Funktion für Aufruf von »Level<5, 4>::Level(int [3][3], int [3][3])«
    

    sogar gaaaanz schnell 👍

    // edit:

    Ferris schrieb:

    Ich glaube du hast inkompatible Arrays benutzt

    jannis95 schrieb:

    nein hab ich nicht...

    Na no na ned ... 🙄

    jannis95 schrieb:

    const int width = 10, height = 8;
    Level<width, height> NeuesLevel(map, collision);
    

    geht auch nicht.

    "Geht nicht" ist keine Fehlerbeschreibung.
    Fehler = ?
    Deklarationen von map und collision = ?

    jannis95 schrieb:

    Hast du es schon mal Compiliert?

    Compiliert toll...



  • Compiliert toll...

    Hm

    OK Ich hab folgenden Code:

    template<size_t width, size_t height>
    class Level
    {
    private:
        int map[width][height];
        int collision[width][height];
    public:
        Level(int (*m)[height], int (*c)[height]);
    };
    
    template<size_t width, size_t height>
    inline Level<width, height>::Level(int (*m)[height], int (*c)[height])
    {
        for (size_t i=0; i<width; i++)
        {
            for (size_t j=0; j<height; j++)
                map[i][j] = m[i][j];
        }
    
        for (size_t i=0; i<width; i++)
        {
            for (size_t j=0; j<height; j++)
                collision[i][j] = c[i][j];
        }
    }
    
    int map[5][4] = {0};
    int collision[5][4] = {0};
    
    Level<5, 4> NeuesLevel(map, collision);
    

    Und bekomme die Fehler:

    test.cpp:1:10: Fehler: »size_t« wurde nicht deklariert
    test.cpp:1:24: Fehler: »size_t« wurde nicht deklariert
    test.cpp:11:10: Fehler: »size_t« wurde nicht deklariert
    test.cpp:11:24: Fehler: »size_t« wurde nicht deklariert
    test.cpp: In Konstruktor »Level<width, height>::Level(int (*)[height], int (*)[height])«:
    test.cpp:14:10: Fehler: »size_t« wurde in diesem Gültigkeitsbereich nicht definiert
    test.cpp:14:17: Fehler: expected »;« before »i«
    test.cpp:14:22: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert
    test.cpp:16:21: Fehler: expected »;« before »j«
    test.cpp:16:26: Fehler: »j« wurde in diesem Gültigkeitsbereich nicht definiert
    test.cpp:20:17: Fehler: expected »;« before »i«
    test.cpp:20:22: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert
    test.cpp:22:21: Fehler: expected »;« before »j«
    test.cpp:22:26: Fehler: »j« wurde in diesem Gültigkeitsbereich nicht definiert
    

    😕 😕



  • #include <cstring>
    

    Welcher Compiler?


  • Mod

    Swordfish schrieb:

    #include <cstring>
    

    Welcher Compiler?

    cstddef bringt das gleiche, aber etwas schlanker.


  • Mod

    #include <cstddef>
    #include <algorithm>
    #include <utiliy>
    
    template <std::size_t width, std::size_t height>
    class Level
    {
    private:
        int map[width][height];
        int collision[width][height];
    public:
        Level(const int (&m)[width][height], const int (&c)[width][height]);
    };
    
    template<size_t width, size_t height>
    Level<width, height>::Level(const int (&m)[width][height], const int (&c)[width][height])
    {
        std::copy( *m, *m + width * height, *map );
        std::copy( *c, *c + width * height, *collision );
    }
    

    Wer mag, macht den Konstruktor noch constexpr-tauglich.



  • C/C++ Code:
    #include <cstring>

    OH.. Jetzt gehts 😃

    Ok Werd hier ne art Schlussstrich ziehen. Dann Rest werde ich wohl alleine hinbekommen.

    VIELEN Dank für die ganze Hilfe! 😃 👍


Anmelden zum Antworten