Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
C++: Zeiger auf Elementfunktionen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mvo
Gast





BeitragVerfasst am: 24. Jan 2002 18:34   Titel: C++: Zeiger auf Elementfunktionen

Hallo,
ich moechte in einem Programm Elementfunktionen einer Klasse ueber Zeiger aufrufen. In C sind Zeiger auf Funktionen ja kein Problem, aber hier komme ich nicht weiter. Ich habe mal ein kleines Testprogramm geschrieben, um das Problem isoliert zu behandeln:
code:

#include <iostream.h>

class TestClass {

public:
TestClass() {};
~TestClass() {};

void func1(void) { cout << "Funktion 1!" << endl; };
void func2(void) { cout << "Funktion 2!" << endl; };
};

main () {
TestClass *A;
void (TestClass::*fptr1)(void);
void (TestClass::*fptr2)(void);

A = new TestClass();
fptr1 = &(A->func1);
fptr2 = &(A->func2);

fptr1();
fptr2();

return 0;
}



Das gibt schon einen Haufen Compilierfehler, aber was besseres faellt mir nicht mehr ein:

mvo@hal9000:~/develop$ g++ -o fpoint fpoint.cpp
fpoint.cpp: In function `int main()':
fpoint.cpp:19: taking the address of a bound member function
fpoint.cpp:19: to form a pointer to member function, say `&TestClass::func1'
fpoint.cpp:20: taking the address of a bound member function
fpoint.cpp:20: to form a pointer to member function, say `&TestClass::func2'
fpoint.cpp:22: pointer to member function called, but not in class scope
fpoint.cpp:23: pointer to member function called, but not in class scope
 

trinity



Anmeldungsdatum: 12.10.2001
Beiträge: 821

BeitragVerfasst am: 24. Jan 2002 19:16   Titel: Re: C++: Zeiger auf Elementfunktionen

Also wenn cih deinen Compieler Richtig verstanden habe, will er das du Zeile 19+20 folgendermassen umschreibst:
code:

fptr1 = &(A->TestClass::func1);
fptr2 = &(A->TestClass::func2);


_________________
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)
 
Benutzer-Profile anzeigen Private Nachricht senden

mvo
Gast





BeitragVerfasst am: 24. Jan 2002 19:50   Titel: Re: C++: Zeiger auf Elementfunktionen

Eine der vielen Kombinationen, die ich schon durchgespielt habe Sad :

fpoint.cpp: In function `int main()':
fpoint.cpp:18: no match for `TestClass & = TestClass *'
fpoint.cpp:11: candidates are: class TestClass & TestClass::operator =(const TestClass &)
fpoint.cpp:19: base operand of `->' has non-pointer type `TestClass'
fpoint.cpp:20: base operand of `->' has non-pointer type `TestClass'
fpoint.cpp:22: pointer to member function called, but not in class scope
fpoint.cpp:23: pointer to member function called, but not in class scope

Was mich stutzig macht, sind die beiden letzten Meldungen. Geht das so ueberhaupt oder kann ich nur innerhalb einer Klasseninstanz mit Zeigern arbeiten?
 

mvo
Gast





BeitragVerfasst am: 24. Jan 2002 21:13   Titel: Re: C++: Zeiger auf Elementfunktionen

So, ich hab's inzwischen:
code:

#include <iostream.h>

class TestClass {

public:
TestClass() {};
~TestClass() {};

void func1(void) { cout << "Funktion 1!" << endl; };
void func2(void) { cout << "Funktion 2!" << endl; };
};

main () {
TestClass *A;
typedef void (TestClass::*MemFuncPtr)(void);

MemFuncPtr fptr1 = &TestClass::func1;
MemFuncPtr fptr2 = &TestClass::func2;

A = new TestClass();

(A->*fptr1)();
(A->*fptr2)();

return 0;
}


Der Nachteil ist, dass ich den Pointer auf die Klasseninstanz _und_ den Pointer auf die Elementfunktion benoetige. Vielleicht bastele ich mir noch eine eigene Hilfsklasse, um das einfacher zu handhaben.
Wo ich das gefunden habe: http://msdn.microsoft.com/archive/en-us/dnarvc/html/msdn_pointer.asp?frame=true
Auch bei Microsoft koennen manche programmieren, obwohl das hier nicht alle wahrhaben wollen .
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy