2-dim. Array mit Pointer an Funktion übergeben?
-
Hey Leute!
Ich hab folgenden Code:
#include<iostream> using namespace std; void initSpielfeld(char** spielfeld) { } int main() { char spielfeld[15][13]; initSpielfeld(spielfeld); }Nur funktioniert das Ganze nicht so wie ich das will. Was ist da falsch?
-
void initSpielfeld((*spielfeld)[13])
-
mal anders rum gefragt, was funktioniert denn nicht?
fehlermeldung?
-
sry war jetzt mein fehler
void initSpielfeld( char (*spielfeld)[13])
-
struct Spielfeld { char feld[15][13]; }; void initSpielfeld(Spielfeld &feld) { } int main() { Spielfeld spielfeld; initSpielfeld(spielfeld); }Aber bevor du groß weiter machst, empfehle ich dir, ein Lehrbuch(kapitel) über Objektorientierung in C++ zu lesen.
-
Skym0sh0 schrieb:
mal anders rum gefragt, was funktioniert denn nicht?
fehlermeldung?Funktioniert nicht heisst vermutlich: compiliert nicht

Und zwar genau deshalb nicht, weil spielfeld bei der Übergabe nicht wie vom TE wahrscheinlich angenommen in einen pointer-to-pointer-to-char zerfällt.sebi91 schrieb:
sry war jetzt mein fehler
void initSpielfeld( char (*spielfeld)[13])Und woher weisst du nun, wie gross die erste Dimension ist?
Besser und immernoch schlecht:void initSpielfeld( char spielfeld[][13], std::size_t dimension1) { //... }
-
die C-Lösung, kaum krisensicherer wäre:
void initSpielfeld(char * Field,size_t dimensionX,size_t dimensionY)
Anmerkung:
C kann keine Exeptions. Fehler musst ueber die Funktions-Signaturen zurueckgeben.
deshalb haben C-Style die meisten Funktionen, wo Fehler auftreten koennen, die aber nicht zu terminate führen sollen, einen FehlerCode als RueckgabeWert.int initSpielfeld(char * Field,size_t dimensionX,size_t dimensionY)
sieht schon eher wie klassisches C aus.
noch nen Tick Krisensicherer geht es mit Safety Funktionen aehnlich den _s funktionen der Winapi. Ob das so viel bringt und den Aufwand lohnt ... k.A. kommt auf den Anwendungsfall an.
Aber wie gesagt, das ist allertiefstes C !
C++ Style ware:
- RAII - Klassen die sich selber initalisieren ! Also Init funktionen überfluessig machen.
- Dyn. Speicherallokation den Containern ueberlassen.also Dynamisch statt C-Arrays -> std::vector
Mussen es StackKlassen sein, dann C-Array's ordentlich kapseln. Mit denen will ausserhalb keiner zu tun haben !
boost::Array bietet da einige Template-basierte Ansaetze!Ciao ...
-
inter2k3 schrieb:
Und woher weisst du nun, wie gross die erste Dimension ist?
Besser und immernoch schlecht:der compiler weis schon selber wann die erste dimesion zu ende ist
nur bei der zweiten dimension ist eine angabe nötig
-
Wenn die Groesse immer gleich ist reicht auch einfach void initSpielfeld(char spielfeld[15][13]);
-
Bitte nutze doch eine Klasse die einen einfach geschachtelten Vektor enthält.