Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.04.2011, 17:31

Tilemap

Hey ich habe eine Frage zur Tilemap. Und zwar habe ich in einem Header

C-/C++-Quelltext

1
2
3
static const int map_breite = 20;
static const int map_hoehe = 20;
int tilemap[map_hoehe][map_breite];

erzeugt.
Wenn ich nun eine Funktion schreibe und

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    tilemap[map_hoehe][map_breite] =
    { 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

dort hineinpacke bekomme ich eine Fehlermeldung. Wenn ich die tilemap aber nicht in den Header setze sonder direkt int vor die Tilemap schreibe geht es. Woran kann das liegen? Danke schonmal für eure Hilfe.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

05.04.2011, 18:04

Das wird ein Linker Fehler sein, welcher wegen mehrfacher Definition anspringt. Oder? Die Fehlermeldung wäre auch gut, wenn du die postest.
Der Linker meldet dir hier, dass du gegen die ODR (one definition rule) verstösst. Das bedeutet, dass in mehreren Quelldateien ein Bezeichner mit dem gleichen Namen definiert wurde. (hat nichts mit Include Guards zu tun!)

3

05.04.2011, 18:10

Fehlermeldung:
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.cpp(126) : error C2059: Syntaxfehler: '{'
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.cpp(126) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.cpp(146) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

05.04.2011, 18:14

Ok. War nicht das, was ich vermutet habe (auch wenn das passieren kann, wenn du das im Header definierst).

Der gezeigte Code ist ansonsten Ok. Zeig mal die Codestelle, wo der Fehler passiert. Der ist ja offensichtlich nicht im Header..

Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

5

05.04.2011, 18:14

Array zuweisungen sind mit Ausnahme von Strings nicht möglich nur die Initialiserung kann so erfolgen.

Lösung deines Problems:

C-/C++-Quelltext

1
2
3
int mapdata[map_hoehe][map_breite] = {..};
...
memcpy(tilemap, mapdata, sizeof(tilemap));


Mfg Rushh0ur

6

05.04.2011, 18:24

Danke dir.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chris13« (05.04.2011, 18:39)


Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

7

05.04.2011, 18:39

Du erstellst innerhalb deiner Funktion, bei bedarf auch auserhalb, ein Variable, von mir aus auch Konstant, und initialiserst sie direkt, da dies erlaubt ist.
Und mit memcpy kopierst du anschliessend die Daten aus dem einen Array ins andere.

Mfg Rushh0ur

8

05.04.2011, 18:41

Jupp danke hab gerade erst gerafft das memcpy zum kopieren von daten auf ein anderes Element genutzt wird ^^.
Für alle die das vllt lesen und auch erst verwirrt sind http://www.cplusplus.com/reference/clibrary/cstring/memcpy/

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

05.04.2011, 18:47

Bei statischer Initialsierung eines Arrays memcpy zu benutzen ist unsinnig. Man kann schon die Array Initialisierung benutzen.
In deinem Beispiel kannst du z.B extern benutzen:

C-/C++-Quelltext

1
extern int tilemap[map_hoehe][map_breite];


und dann in der .cpp:

C-/C++-Quelltext

1
2
int tilemap[map_hoehe][map_breite] =
    {...};

10

05.04.2011, 18:54

Mit extern funktioniert es leider nicht da bekomme ich:
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.hpp(24) : error C2071: 'CGame::tilemap': Ungültige Speicherklasse
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.cpp(126) : error C2059: Syntaxfehler: '{'
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.cpp(126) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.cpp(146) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>Main.cpp
1>c:\users\christian\documents\visual studio 2008\projects\sdl_packman\game.hpp(24) : error C2071: 'CGame::tilemap': Ungültige Speicherklasse
1>Code wird generiert...

Werbeanzeige