JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=6e893fe9143081481af4d1fa049817f6Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Funktionszeiger, Problem mit Klassenfunktionen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 12:33    Titel: Funktionszeiger, Problem mit Klassenfunktionen Antworten mit Zitat

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..Sad
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 12:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.08.2005, 13:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 13:41    Titel: Antworten mit Zitat

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 Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.08.2005, 13:43    Titel: Antworten mit Zitat

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 Wink


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 14:52    Titel: Antworten mit Zitat

Ganz einfach, Du überlagerst den Speicher Deiner Klassenmethode mit der einer globalen Methode Smile 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 Smile
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 15:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 15:49    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
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

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.08.2005, 15:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.08.2005, 15:51    Titel: Antworten mit Zitat

TheMillenium hat Folgendes geschrieben:
FallenAngel84 hat Folgendes geschrieben:
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

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 15:53    Titel: Antworten mit Zitat

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!! Very Happy
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 09.08.2005, 16:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.08.2005, 16:06    Titel: Antworten mit Zitat

es heisst ja auch:

CPP:
_m.funcSelectOne();

_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 09.08.2005, 16:10    Titel: Antworten mit Zitat

ich glaub dann hätte er mir ne andere Fehlermeldung gebracht.. Wink
sorry hab hier im Post die Klammern vergessen, im Code sind sie da..

p.s.: außerdem hatte ich auch das Semikolon vergessen.. Embarassed
das hätte wesentlich mehr Fehlermeldungen gegeben..
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 09.08.2005, 17:37    Titel: Antworten mit Zitat

CPP:
data _m;
ai_ga _a;


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 Wink )
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum