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 vonmapundcollision= ?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?
-
Swordfish schrieb:
#include <cstring>Welcher Compiler?
cstddef bringt das gleiche, aber etwas schlanker.
-
#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!
