Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

1

17.05.2010, 15:07

Methodenzeiger

Hey Leute,

ich schreib morgen Abschlussprüfung in C++ und wollt mir noch paar Sachen anschauen. Unteranderem Methodenzeiger. Ich kann Zeiger auf normale Funktionen schon erstellen. Aber auf Methoden wills irgendwie nicht. Ist jetzt keine große Sache wenn ichs nicht kann. Wollt nur gerne mal wissen wie das mit den Dingern funktioniert.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using std::cout;
using std::endl;

class Klasse
{
public:
    void F(int x)
    {
        cout << "F(" << x << ")\n";
    }
};


void Funktion(int x)
{
    cout << "Funtion(" << x << ")\n";
}

int main()
{
    void (*P)(int) = Funktion;
    void (Klasse::*M)(int) = &Klasse::F;
    
    P(10);
    M(20);
    
    return 0;
}


VSC++ 2008 Express sagt folgendes:

C-/C++-Quelltext

1
2
3
4
5
6
7
------ Erstellen gestartet: Projekt: MethodenZeiger, Konfiguration: Debug Win32 ------
Kompilieren...
MethodenZeiger.cpp
c:\development\methodenzeiger.cpp(26) : error C2064: Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Michael\Eigene Dateien\Visual Studio 2008\Projects\MethodenZeiger\MethodenZeiger\Debug\BuildLog.htm" gespeichert.
MethodenZeiger - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Und G++ meint:

C-/C++-Quelltext

1
2
MethodenZeiger.cpp: In function 'int main()':
MethodenZeiger.cpp:26: error: must user .* oder ->* to call pointer-to-member function in 'M (...)'


Hoff mir kann jemand helfen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

17.05.2010, 15:25

Um eine Methode aufzurufen brauchst du ein Objekt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
int main()
{
    void (*P)(int) = Funktion;
    void (Klasse::*M)(int) = &Klasse::F;
    Klasse obj;
    
    P(10);
    (obj.*M)(20);
    
    return 0;
}

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

3

17.05.2010, 15:27

Danke dot für die schnelle Antwort. Hat super geklapt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

17.05.2010, 22:02

Hier:
http://www.newty.de/fpt/index.html

gibt es auch ein sehr gutes Tutorial für Funktionszeiger.

Werbeanzeige