Funktionen als Parameter
-
hi leute,
ich probier grad n bisschen rum mit dem übergeben von pointern auf funktionen.
Nutzbar soll das mal für Eventhandling sein.
Einfach nur Funktionen übergeben ist da nicht das Problem, aber wenn die Funktionen noch zusätzliche Parameter haben stürzt das Programm immer ab::void *func1() { cout << "func1" << endl; } void *func2(obj * cg) { cout << "func2: "; cout << cg->getName() << endl; // kritische zeile!!! if(cg->getName()==NULL) gibt ne üble compiler meldung! } void func(void *dat()) { dat(); } obj *hier = new ....; //(hat fkt.std::string getName()) void funcc(void *dat(obj * cg), obj * cgg) { dat(cgg); } main::func(func1); //-> funzt ohne Problem(aber warum lässt man die () weg?) funcc(funcObj1, hier); //-> wird kompiliert aber prog stürzt ab(fatal segmentation)!
mir ist klar daß es hier nen Null Pointer gibt aber vielleicht kann mir einer nen tipp geben was hier sache ist,
oder ob ich mich in ein Terrain wage daß mir noch zu hoch ist(bin ja auch noch nicht lange dabei).gruß und danke im voraus- cya Q
[edit by c.rackwitz: der Onkel Indent war wieder zu Besuch ]
-
1. Was hat das mit Spiele-/Grafikprogrammierung zu tun?
2. Code-Tags benutzen
3. Der Code ist unübersichtlich, und da scheinen auch Teile zu fehlen.
-
ist eventhandling nicht n hauptding bei spielen?
ich versuche SDL_Event zu vervenden, und will gerne halt noch objekte an die events ranhängen bzw funktionen denen objekte übergeben werden!
-
Ja, aber das wäre im C-Forum wesentlich besser aufgehoben.
-
QarateKid schrieb:
ist eventhandling nicht n hauptding bei spielen?
es ist ein hauptding bei sehr vielen sachen. ich verschieb dich mal bei soeiner grundlegenden frage.
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Toll, jetzt wird der nichtformatierte, unvollständige C++-Code nach ANSI C verschoben.
-
das liest du dir jetzt so oft durch, bis du wenigstens ein bisschen davon verstehst:
http://www.newty.de/fpt/index.html
-
hey danke leute, bitte nich genervt sein,
dacht halt daß man so was generell verwendet für Eventhandling-> deshalb spiele, daß da leute halt eher ahnung haben.
mit den suchbegriffen "funktionen" "parameter" "pointer" hab ich hier nichts reißen können.c.rackwitz danke für den schrieb werds mir reinziehen.
was heißt hier unformatiert, ok zeile 21 war wohl müll:
dat(cgg, hier);
war ja nur zum testen der sache an sich;meld mich dann erst wenn ich den schrieb durch hab(dann aber richtig), cya
-
unformatiert heisst:
* keine oder beschissene einrueckung
* inkonsistente verwendung von whitespace bei der zeichensetzung
* nichtverwendung von [cpp] tags
-
kannste ja dann zu fast allen einträgen hier sagen, weiß nich wo ich mir so was abschauen soll wenn du nich konkreter wirst...
was genau sind "[cpp]tags"(oute ich mich jetz als totaler noob aber keinen blassen schimmer) cpp hat doch nur geschützte wörter keine tags, oder?ok habs, richtig gehts so(habs wohl ein "bisschen" verstanden):
void(*testptr)(Testobj *t);
void testfkt(Testobj *t) {cout<<"test: "<<t->getName()<<endl;}
call:
Testobj t_obj = new Testobj(string Name);
testptr = testfkt;
testptr(t_obj);Hab vorher leider nur bissel mit java... rumgespielt deshalb bin ich wohl ganz schön ahnungslos.
ist die technik denn auch effizient? ich mein ich hab das gefühl bei den aktionen hinkt der rechner kurz(ok in meinem testprog läuft noch ne ganze menge SDL mit aber sollt doch nich so reinhauen).
vielleicht können wir ja gleich das thema auf inlines ausweiten. Das geht ja anscheinend auch(z.B. inline void testfkt(..), nur weiß ich noch nich ob der compiler es überhaupt nutzt(kann man das irgendwie rausbekommen?).
Vielleicht jemand mit ahnung n statement?
-
void (*testptr)(Testobj *t); void testfkt(Testobj *t) {cout<<"test: "<<t->getName()<<endl;} call: Testobj *t_obj = new Testobj("hier eher kein 'string Name' sondern ne variable oder konstante"); // noch ein stern hier am anfang testptr = testfkt; testptr(t_obj); // stimmt so.
cpp tags sind solche:
[cpp]code kommt hier rein, dann wirds ordentlich angezeigt[/cpp]und bevor du mir weiter mit klassen und inlined methods kommst, schieb ich dich nach C++. die C++ler haben uebrigens auch funktionspointer.