void Funktion als Funktionsparameter

üäpöol

Erfahrenes Mitglied
Hallo,

ich möchte gerne eine void Funktion als Funktionsparameter übergeben, also:
C++:
void Funktion(void Parameter());
Wenn ich jetzt die Funktion aufrufe bekomme ich folgende Fehlermeldung:
"Error: Das Argument vo Typ ""void"" ist mit dem Parameter vom Typ ""void (*)()"" inkompatibel."
Ich habe schon alles mögliche ausprobiert, aber der Compiler gibt immer eine andere Fehlermeldung aus.

Vielen Danke für eure Hilfe.
 
Zuletzt bearbeitet von einem Moderator:
Was genau hast du eigentlich damit vor? Willst du einen void-Pointer übergeben oder einen Funktionszeiger? Willst du innerhalb von "Funktion" die Funktion "Parameter" aufrufen, oder was genau ist das Ziel?
 
Ich möchte diese Funktion in einer externen Datei haben. Deshalb dürfen keine Variablen definiert sein und ich muss alles mit Paramter machen.
 
Wie, was meinst du mit "externe Datei"? Wenn du eine Funktion in der Source-Datei a.c implementiert hast, hast du sicherlich auch eine a.h. Diese a.h beinhaltet dann den Prototypen von deiner Funktion. Dann kannst du die a.h in der b.c includen und die Funktion in b.c aufrufen.

Ich verstehe den Sinn hinter deinem Vorhaben nicht.
 
Richtig, ich habe auch eine Headerdatei, allerdings möchte ich diese Datei auch in anderen Projekten öffnen können und es wäre auf jeden Fall vorteilhaft. Außerdem arbeite ich mit StdAfx und ich laufe Gefahr, dass sich machne Dateien selbst includieren.
 
Aber trotzdem bleibt die Frage, was du jetzt machen willst? Willst du den Rückgabewert der Funktion übergeben? Oder einen Funktionszeiger?
 
Ich möchte die ganze Funktion übergeben, nicht den Rückgabewert, so dass innerhalb dieser Funktion dann diese Funktion aufgerufen werden kann.
 
Das funktioniert mit einem Zeiger auf die Funktion:

Code:
#include <stdio.h>

void Parameter()    // Definition der ersten Funktion
{
    printf ("Erfolgreich!\n");
}

void Funktion (void (*funcptr) ())   // Zweite Funktion. Sie hat einen Zeiger auf eine Funktion als Parameter. void bedeutet, der Rückgabewert der Funktion, auf der der Zeiger zeigt ist void. (*funcptr) ist sein name (unbedingt in Klammern!) und die nächste Klammern sind die Argumente, die die Funktion bekommt (nur die Datentypen, wie bei einer Funktionsdeklaration).
{
    printf ("Aufrufen der anderen Funktion: ");

    (*funcptr) ();    // So wird die Funktion aufgerufen, auf die der Funktionszeiger zeigt

    printf ("Exit!\n");
}

int main()
{
    void (*ptr) () = Parameter;   // Der Funktionszeiger ptr zeigt auf die Adresse der Funktion Parameter

    Funktion (ptr);     // Die Funktion wird mit dem Funktionszeiger aufgerufen
}
 
Zuletzt bearbeitet:
Leider funktioniert eure Lösung nicht. Ich bekomme folgende Fehlermeldung: "Error: Das Argument vom Typ void(*)() ist it dem Parameter vom Typ void(*(*)())() inkompatibel.". Kann das damit etwas damit zu tu haben, dass ich in C++ programmiere oder ein Win32 Projekt habe?! Eigentlich nicht.

EDIT:
Konvertierung des Parameters 6 von 'void (__cdecl *)(void)' in 'void (__cdecl *(__cdecl *)(void))(void)' nicht möglich
wird auch als Fehlermeldung angezeigt.
 
Zuletzt bearbeitet:
Zurück