Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.08.2005, 12:33 Titel: Funktionszeiger, Problem mit Klassenfunktionen |
|
|
Zitat: | c:\\ai_ga.cpp(15): error C2440: '=' : cannot convert from 'ai_ga_genom &(__thiscall ai_ga::* )(void)' to 'ai_ga_genom &(__cdecl *)(void)'
|
Ich will eine Klassenfunktion einem Funktionszeiger zuweisen, dabei kommt aber diese Fehlermeldung heraus...leider kenn ich mich nicht so gut mit Funktionszeigern aus.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 08.08.2005, 12:59 Titel: |
|
|
Das Geht meines erachtens so nicht, weil einer Klassenfunktion nichts zugewiesen werden kann.
Du müsstest also einen Funktionspointer als Klassenvariable nutzen, diesen kannst du dann (am sichersten über eine Set-Methode) den gewünschten Pointer übergeben. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.08.2005, 13:04 Titel: |
|
|
entweder du machst deine klassenfunktion static oder du versuchst deine Funktionspointer etwas genauer zu definieren:
typedef [RückgabeTyp]([KlassenName]::*[TypName])([Parameterliste]);
Hier ist ein prima Tutorial dazu: http://www.gamedev.de/modules.php?op=modload&name=News&file=article&sid=108&mode=thread&order=0&thold=0 _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 08.08.2005, 13:41 Titel: |
|
|
es geht doch es ist 1. sehr tricky und 2. für dieses Gebiet nicht empfehlenswert! Nennt sich union.
Aber Fallen und AFE-GmdG haben Dir schon bessere Lösungen gegeben _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.08.2005, 13:43 Titel: |
|
|
Patrick hat Folgendes geschrieben: | es geht doch es ist 1. sehr tricky und 2. für dieses Gebiet nicht empfehlenswert! Nennt sich union.
Aber Fallen und AFE-GmdG haben Dir schon bessere Lösungen gegeben |
sag mal deine lösung, wieso union O.o _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 08.08.2005, 14:52 Titel: |
|
|
Ganz einfach, Du überlagerst den Speicher Deiner Klassenmethode mit der einer globalen Methode Habs leider grad net so ganz im Kopf (andere Dinge grad drin)
Aber wenn ich z.B. Funktionszeiger auf Ganzwerte setzen will ist dies mit union kein Problem _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.08.2005, 15:47 Titel: |
|
|
AFE-GmdG hat Folgendes geschrieben: | Das Geht meines erachtens so nicht, weil einer Klassenfunktion nichts zugewiesen werden kann.
Du müsstest also einen Funktionspointer als Klassenvariable nutzen, diesen kannst du dann (am sichersten über eine Set-Methode) den gewünschten Pointer übergeben. |
so mach ich das doch...aber das geht ja nicht..
Eigentlich ist das so:
Ich hab den Funktionszeiger als Variable in der Klasse und ich will den Funktionszeiger auf eine Funktions aus der Klasse zeigen lassen...geht aber irgendwie nicht.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.08.2005, 15:49 Titel: |
|
|
Ich hab das so ohne typedef versucht..aber dann meckert er TypName ist keine Funktion aus KlassenName..
edit: sry wegen dem doppelpost _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.08.2005, 15:50 Titel: |
|
|
Dann verweise ich mal spontan auf meinen ersten Post in diesem Thread, das sollte genau dsa bieten was du möchtest. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.08.2005, 15:51 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: |
Ich hab das so ohne typedef versucht..aber dann meckert er TypName ist keine Funktion aus KlassenName..
edit: sry wegen dem doppelpost |
Dann zeige doch einfach mal die betreffenden Codeteile. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.08.2005, 15:53 Titel: |
|
|
okay dann schau ich mir das Tutorial an..
Aber ich versteh trotzdem noch nicht, warum ich eine Klassenfunktion nicht einfach einem Funktionszeiger der in der selben Klasse definiert wurde zuweisen kann..
jetzt geht's auf einmal...
so ein Mist, ich glaub mein Compiler spinnt..war schon in den letzten Tagen so...ich geb was ein, Fehlermeldung über Fehlermeldung, ich kopier das Gleiche genau das Gleiche aus einer anderen Datei...Fehlermeldung, nach paar Neustarts kann ichs auch wieder so eingeben...wisst ihr woran das liegen könnte? einfach nur wenn ich z.B. eine Struktur mit Konstruktor und Destruktor in C schreibe...
Aber Danke für eure Beiträge und eure Hilfe, jetzt weiß ich auf jeden Fall welchen Thread ich mir anschauen muss wenn ich Probleme mit Funktionszeigern habe!! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 09.08.2005, 16:03 Titel: |
|
|
doch wieder Probleme...bin gespannt wer von euch dafür eine Lösung kennt..
hab das jetzt so gemacht dass ich einfach den Klassennamen davor geschrieben habe vor die Funktion...
Code: |
struct data
{
...
ai_ga_genom& (ai_ga::*funcSelectOne)(void);
..
} _m;
|
wenn ich die aber dann so aufrufe:
Code: | _m.funcSelectOne(); |
bekomme ich diese ermunternde Fehlermeldung:
Zitat: | c:\\ai_ga.cpp(569) : error C2064: term does not evaluate to a function taking 0 arguments
|
_________________ The source of all power is in its destiny...
Zuletzt bearbeitet von TheMillenium am 09.08.2005, 16:10, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 09.08.2005, 16:06 Titel: |
|
|
es heisst ja auch:
_________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 09.08.2005, 16:10 Titel: |
|
|
ich glaub dann hätte er mir ne andere Fehlermeldung gebracht..
sorry hab hier im Post die Klammern vergessen, im Code sind sie da..
p.s.: außerdem hatte ich auch das Semikolon vergessen..
das hätte wesentlich mehr Fehlermeldungen gegeben.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 09.08.2005, 17:37 Titel: |
|
|
CPP: | (_a._m.funcSelectOne)();
|
funcSelectOne benötigt ja noch den this-Zeiger. Deswegen braucht man noch eine Instanz von ai_ga welche dann die Funktion aufruft.
(Steht übrigends auch im Tutorial ) _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
|