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

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

1

18.05.2011, 23:44

[C++] 2 Dimensionale Array mit Zeiger an einer Funktion übergeben.

Hey,
ich versuche seit mehreren Stunden ohne Erfolg eine 2 Dimensionale Array mit Hilfe von Zeigern an eine Funktion zu übergeben.
Ich weis leider nicht wie ich anders ran gehen könnte.
Bei der Fehlersuche ist mir aufgefallen das folgender Fehler angezeigt wird: Error: Der Bezeichner "KarteHoehe/KarteBreite" ist nicht definiert.".
Ich hoffe auf Hilfe und verweile auf weiteres.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// ################################################
// Name: Bloo
// Spieler: 1
// Info: Karte die bewirtschaftet wird.
// ################################################

#include <iostream>
#include <string>

using namespace std;

// Strukturen
struct S_Feld
{
    string name;
    int Kosten;
    int Konto;
    int Lohn;
    bool Besetzt;
}

// Prototypen
void KarteAnzeigen (S_Feld *pKarte[KarteHoehe][KarteBreite]);

int main ()
{
    // Karte Konstanten
    const int KarteHoehe = 5;
    const int KarteBreite = 5;

    // Variablen
    S_Feld Karte[KarteHoehe][KarteBreite];      // 2 Dimensionales Array für die Karte
    int x, y;                                   // X und Y für die Koordinaten
    int eingabe;                                // Eingabe für Werte

    // Karte initialisieren
    for (x=0; x<KarteHoehe; x++)
    {
        for (y=0; y<KarteBreite; y++)
        {
            Karte[x][y].Besetzt = false;
        }
    }

    // Game Loop
    do
    {
        cout << "1 - Karte Anzeigen" << endl;
        cout << "2 - Feld Kaufen" << endl;
        cout << "3 - Feld Lohn abholen" << endl;
        cout << "0 - Beenden" << endl;
        cin >> eingabe;
        
        switch (eingabe)
        {
            // Karte Anzeigen
            case 1:
            {
                // Hier soll die Funktion zum anzeigen der Karte rein!
            }
        }

    } while (eingabe != 0);
    

    return 0;
}


MFG:
Raidenkk

2

19.05.2011, 00:12

Error: Der Bezeichner "KarteHoehe/KarteBreite" ist nicht definiert."


Na dann schau dir doch mal den Gültigkeitsbereich an für die Konstanten. Du definierst die in der main() Funktion und somit sind die beiden auch nur innerhalb dieser Funktion bekannt.

Gruß
SaRu_

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

3

19.05.2011, 06:08

Hmm ich habe jetzt S_Feld Karte[KarteHoehe][KarteBreite]; vor dem Prototyp Global aber es scheint immer noch nicht zu Funktionieren.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
 //.............. 
S_Feld Karte[KarteHoehe][KarteBreite];      // 2 Dimensionales Array für die Karte

// Prototypen
void KarteAnzeigen (S_Feld *pKarte[KarteHoehe][KarteBreite]);

int main ()
{

// ............

4

19.05.2011, 06:53


// Prototypen
void KarteAnzeigen (S_Feld *pKarte[KarteHoehe][KarteBreite]);

int main ()
{
// Karte Konstanten
const int KarteHoehe = 5;
const int KarteBreite = 5;

...

Ich glaub Saru wollt dir sagen das diese const int vor die Main und vor den Prottypen gehören.

Weil sonst weiß der Compiler ja net was für Datentypen KarteHoehe und KarteBreite sind wenn er die Funktion Aufruft.



Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

5

19.05.2011, 07:08

Jetzt sagt mir der Compiller das KarteHoehe kein Konstantenwert aufweist setze ich aber [const int KarteHoehe] steht da das es kein zuässiger Typ ist.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
// Karte Konstanten
const int KarteHoehe = 5;
const int KarteBreite = 5;

// Prototypen
void KarteAnzeigen (S_Feld *pKarte[KarteHoehe][KarteBreite]);

int main ()
{

    // Variablen
    S_Feld Karte[KarteHoehe][KarteBreite];      // 2 Dimensionales Array für die Karte

6

19.05.2011, 07:23

Das liegt glaub daran das dieses Array einen Konstanten wert erwartet allso keine Variable sondern eine richtige Zahl.

Du kannst mal probier die const int KarteHoehe und KarteBreite durch #define zu ersetzen oder du nimmst ein Dynamsiches 2d Array.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

7

19.05.2011, 08:00

mein c++ is schon etwas eingerostet, aber kannst du nicht einfach nur einen * auf das erste element übergeben und dann
in der KarteAnzeigen funktion durchloopen.?

also z.b. so:

int map[zeilen][spalten];
void KarteAnzeigen(int *map, int zeilen, int spalten)

und aufrufen tust du es dann so:
KArteAnzeigen ((int*)map, zeilen, spalten);


lg

edit: nach ein bisschen gegoogle denk ich nun, dass du auf die daten (wenn dus so wie ich geschrieben hab machst) wie in einem 1D array zugreifst...
also: map[i*(j+spalten)] (i,j sind for-schleifen vars)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AlymcGeel« (19.05.2011, 08:06)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

19.05.2011, 11:47

KArteAnzeigen ((int*)map, zeilen, spalten);

Der Cast ist überflüssig.

Sonst stimmts, du musst wohl die Position im Array selbst berechnen.

Ein kompletter Schleifendurchlauf, Zeile für Zeile, sieht dann so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
for (int y = 0; y<Hoehe; ++y)
{
    for (int x = 0; x<Breite; ++x)
    {
        cout << Feld[y*Breite+x] << ' ';
    }
    cout << endl << endl; // Ende der Zeile
}

Wenn du sowieso nicht zwischen Zeilen und Spalten unterscheiden willst und nur stur alle Elemente durchlaufen willst kannst du das auch so machen:

C-/C++-Quelltext

1
2
3
4
for (int x=0; x<Hoehe*Breite; ++x)
{
    Feld[x] = x;
}
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige