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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
#include <iostream> using namespace std; struct S_Spielfeld { bool besetzt; bool Farbe; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#include "KlassenHeader.hpp" #include "FunktionenHeader.hpp" int main() { const int Höhe = 7; const int Breite = 7; S_Spielfeld *a_Spielfeld[Höhe] [Breite]; SpielfeldBerechnen(Höhe,Breite,&a_Spielfeld); SpielfeldSchreiben(Höhe,Breite,&a_Spielfeld); } |
C-/C++-Quelltext |
|
1 2 |
void SpielfeldBerechnen(const int Höhe,const int Breite,S_Spielfeld *a_Spielfeld[] []); void SpielfeldSchreiben(const int Höhe,const int Breite,S_Spielfeld *a_Spielfeld[] []); |
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 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 |
#include "FunktionenHeader.hpp" #include "KlassenHeader.hpp" //SpielfeldBerechnen() // //Berchnet, ob ein Feld schwarz oder weiß ist // void SpielfeldBerechnen(const int Höhe,const int Breite,S_Spielfeld *a_Spielfeld[] []) { for (int x = 0; x <= Höhe; x++) { for (int y = 0; y <= Breite; y++) { if (x % 2 == 0 && y % 2 == 0) { *a_Spielfeld[x] [y].Farbe = true; } else if (x % 2 != 0 && y % 2 != 0) { *a_Spielfeld[x] [y].Farbe = true; } else { *a_Spielfeld[x] [y].Farbe = false; } } } } //SpielfeldBerechen() // //SpielfeldSchreiben() // //Schreibt das Spielfeld // void SpielfeldSchreiben(const int Höhe,const int Breite,S_Spielfeld *a_Spielfeld[] []) { for (int x = 0; x <= Höhe; x++) { for (int y = 0; y <= Breite; y++) { if (*a_Spielfeld[x] [y].Farbe == false) { cout << "|||"; } else { cout << " "; } } cout << endl; } } //SpielfeldSchreiben() // |
Zitat
Achja, ich habe <iostream> mal nur in der einen Headerdatei eingefüg, genauso wie den std namespace.
Ist das so in Ordnung oder sollte ich lieber jedesmal neu einfügen?
Community-Fossil
C-/C++-Quelltext |
|
1 |
S_Spielfeld a_Spielfeld[Breite][Höhe]; |
C-/C++-Quelltext |
|
1 |
S_Spielfeld a_Spielfeld[Breite*Höhe];
|
C-/C++-Quelltext |
|
1 |
S_Spielfeld a_Spielfeld[5][3]; |
C-/C++-Quelltext |
|
1 |
S_Spielfeld a_Spielfeld[5+3*Breite]; |
Der Link ist aufjedenfall interessant .Zitat
1) Siehe dazu: http://msdn.microsoft.com/en-us/library/…v=vs.71).aspx
So wäre es besser?Zitat
using std::cout;
using std::cin;
using std::endl;
Das ist die Datei funktionenheader:Zitat
funktionenheader.hpp(1): error C2061: Syntaxfehler: Bezeichner 'S_Spielfeld'
funktionenheader.hpp(2): error C2061: Syntaxfehler: Bezeichner 'S_Spielfeld'
C-/C++-Quelltext |
|
1 2 |
void SpielfeldBerechnen(const int Breite, const int Höhe, S_Spielfeld *a_Spielfeld[]); void SpielfeldSchreiben(const int Breite, const int Höhe, S_Spielfeld *a_Spielfeld[]); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> using std::cout; using std::cin; using std::endl; struct S_Spielfeld { bool besetzt; bool Farbe; }; |
Was mache ich hier falsch?Zitat
klassenheader.hpp(: error C2011: 'S_Spielfeld': 'struct' Typneudefinition
klassenheader.hpp(: Siehe Deklaration von 'S_Spielfeld'
Community-Fossil
Zitat
funktionenheader.hpp(1): error C2061: Syntaxfehler: Bezeichner 'S_Spielfeld'
Zitat
klassenheader.hpp(: error C2011: 'S_Spielfeld': 'struct' Typneudefinition
C-/C++-Quelltext |
|
1 |
void SpielfeldBerechnen(const int Breite, const int Höhe, S_Spielfeld *a_Spielfeld[]); |
C-/C++-Quelltext |
|
1 |
void SpielfeldBerechnen(const int Breite, const int Höhe, S_Spielfeld a_Spielfeld[]); |
Hat geholfen .Zitat
Schau dir mal Includeguards an. Das dürfte helfen
Funktioniert, allerdings kriege ich es nicht hin, das ganze als Zeiger zu übergeben, egal wie ich es schreibe.Zitat
hier ist entweder das * oder die [] zu viel.
C-/C++-Quelltext
1
void SpielfeldBerechnen(const int Breite, const int Höhe, S_Spielfeld a_Spielfeld[]);
So ists besser
Zitat
c:\users\**********\documents\visual studio 2010\projects\mein schach\mein schach\main.cpp(10): error C2664: 'SpielfeldBerechnen': Konvertierung des Parameters 3 von 'S_Spielfeld *(*)[49]' in 'S_Spielfeld *' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
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 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
void SpielfeldBerechnen(const int Breite, const int Höhe, S_Spielfeld *a_Spielfeld);//aus der Headerdatei /////////////////////////////////////////////////// void SpielfeldBerechnen(const int Breite,const int Höhe,S_Spielfeld *a_Spielfeld)//aus der Funktionen Quelldatei { for (int x = 0; x <= Breite; x++) { for (int y = 0; y <= Höhe; y++) { if (x % 2 == 0 && y % 2 == 0) { a_Spielfeld[x + y * Breite].Farbe = true; } else if (x % 2 != 0 && y % 2 != 0) { a_Spielfeld[x + y * Breite].Farbe = true; } else { a_Spielfeld[x + y * Breite].Farbe = false; } } } } ///////////////////////////////// #include "KlassenHeader.hpp"//hier noc die maindatei #include "FunktionenHeader.hpp" int main() { const int Breite = 7; const int Höhe = 7; S_Spielfeld *a_Spielfeld[Breite * Höhe]; SpielfeldBerechnen(Breite, Höhe, &a_Spielfeld); SpielfeldSchreiben(Breite, Höhe, &a_Spielfeld); } |
Wusste garnicht, dass man auch ganze Strukturen übergeben kann .Zitat
pack dir dein 2dimensionales (oder auch noch mehr dimensional) einfach in ein struct und übergib das struct
oder noch besser, nimm std::vector<std::vector<int>>...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rexona for men« (17.07.2011, 19:20)
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 |
S_Spielfeld a_Spielfeld[Breite * Höhe];
SpielfeldBerechnen(Breite, Höhe, a_Spielfeld);
|
C-/C++-Quelltext |
|
1 2 |
for (int x = 0; x <= Breite; x++) for (int y = 0; y <= Höhe; y++) |
Nächste Frage: Was ist ein gutes NachschlagwerkZitat
Versuchs mal damit.
Dort übergibst du bereits einen Zeiger. Ein Array kann oft (d.h. nicht immer) wie ein Zeiger auf das erste Element behandelt werden. Mehr dazu kannst du in einem guten Nachschlagewerk nachlesen.
Hat den letzten Fehler beseitigt.Zitat
Das ist ebenfalls falsch. Da gehört jeweils < hin sonst kriegst du eine Zugriffsverletzung.
Präinkrement (++x) ist übrigens auch zu bevorzugen.
Community-Fossil
Werbeanzeige