2 Fragen (arrays einbinden und const char to char)
-
Hallo...
Habe 2 ProblemeHab schon in der Suche nachgeschaut aber nichts passendes,also was funzt,gefunden.
Deswegen frag ich mal nach:
Wie bindet man ein Array von einer Klasse in eine andere Klasse ein?
Hab das jetzt so gemacht:Die arrays in der map-klasse:
int tilematrix[16][16]; bool coll_layer[16][16];
Nun die Funktion in der Player-Klasse:
void move(bool *coll_layer[16][16]){ //Bewgung des Spielers //begin if (key[this->key_up] && coll_layer[player_tilex][player_tiley-1]==false){ this->player_tiley = this->player_tiley-this->speed; } if (key[this->key_down] && coll_layer[player_tilex][player_tiley+1]==false){ this->player_tiley = this->player_tiley+this->speed; } if (key[this->key_left] && coll_layer[player_tilex-1][player_tiley]==false){ this->player_tilex = this->player_tilex-this->speed; } if (key[this->key_right] && coll_layer[player_tilex+1][player_tiley]==false){ this->player_tilex = this->player_tilex+this->speed; } //ende }
Und hier der Funktionsaufruf in der Hauptschleife:
player player1; map karte; karte.create_map(); player1.create_player() . . . player1.move(karte.coll_layer[16][16]); . . .
Der Compiler meldet dann folgenden Fehler:
no matching function call to 'player::move(bool&) candidates are: void player::move(bool* (*)[16])
Dann hab ich noch ne Frage:
Bestimmt kennt ihr auch das Problem:
Wenn man z.b. ein Bild laden möchte und dafür z.b. diese Funktion geschrieben hat:void picture_load(char const filename,char picture_name){ BITMAP *picture_name; picture_name = load_btimap(filename+"bmp",NULL); }
Diese Funktion soll jetzt nur ein Beispeil sein.
Wenn man nun diese Funktion wie folgt aufruft:picture_load("bild1","Test");
kommt dann der Fehler:
invalid conversion from 'const char* to char'
Hab dazu auch schon die Suche befragt aber auch nichts gefunden um mein Problem zu lösen.
Wäre euch sehr dankbar für Hilfe!
THX!
-
Rambo256 schrieb:
[...]
Der Compiler meldet dann folgenden Fehler:no matching function call to 'player::move(bool&) candidates are: void player::move(bool* (*)[16])
http://www-info2.informatik.uni-wuerzburg.de/dclc-faq/kap2.html Nr. 2.10ff.
void picture_load(char const filename,char picture_name){ BITMAP *picture_name; picture_name = load_btimap(filename+"bmp",NULL); }
[...]
kommt dann der Fehler:invalid conversion from 'const char* to char'
Zwei chars verknüpft man, indem man extra Speicherbereich bereitstellt und dann beide Einzelstrings hineinkopiert (strcpy & Co, strcat & Co). Eine natürliche Verkettung mit dem +-Op funktioniert zB mit der Klasse std::string, die man hier im Forum regelmäßig vorgeführt bekommt.
-
1. http://pw1.netcom.com/~tjensen/ptr/pointers.htm
2. du musst ja auch pointer nehmen und nicht einzelne chars. Ein char bedeutet ein Zeichen
Und wenn du einen String beschreiben willst, dann darfst du eh kein Stringliteral nehmen!
void load_picture(char const *filename,char *name) { //... } int main() { char pname[100]; //entsprechend Speicher reserviert load_picture("datei.picture",pname); }
Wenn ich dich richtig einschätze, solltest du vielleicht erstmal mit den STL-Typen (std::string, std::vector) arbeiten, da diese dir das Leben deutlich erleichtern. Mit den Basis-Typen kannst du dich dann später befassen.