-
Hallo,
ich möchte gerne eine void Funktion als Funktionsparameter übergeben, also:
Wenn ich jetzt die Funktion aufrufe bekomme ich folgende Fehlermeldung:Code cpp:1
void Funktion(void Parameter());
"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.
-
30.12.11 11:03 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
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?
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Ich möchte diese Funktion in einer externen Datei haben. Deshalb dürfen keine Variablen definiert sein und ich muss alles mit Paramter machen.
-
30.12.11 11:09 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
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.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
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.
-
Hi
Code cpp:1 2 3 4 5 6 7 8 9 10
void paramfunk(); void funk(void(*x)()) { x(); } .... funk(paramfunk);
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Das funktioniert mit einem Zeiger auf die Funktion:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#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 }Geändert von ibafluss (30.12.11 um 11:35 Uhr)
-
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.Geändert von üäpöol (31.12.11 um 17:06 Uhr)
-
31.12.11 17:28 #11
Welchen Compiler verwendest du denn? Hast du den Code genau übernommen?
Mit GCC klappt es wunderbar bei mir, aber auch online auf Codepad.org: http://codepad.org/RP9C0eTv.mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
Den Code habe ich so nicht übermommen, aber meinen nach diesrsem Prinzip angepasst.
Ich verwende den Mircosoft Visual Studio 2010 C++ Express. (Ich programmiere auch in C++), aber C Code macht ja nochts.
-
01.01.12 12:09 #13
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
Zeig doch mal deinen Code.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Na schön, ich kürze das ganze allerdings das Ganze gewaltig, weil ein knapp 2000 Zeilen Code wohl ein bisschen zu viel sind.

MAIN.CPP
Code cpp:1 2 3 4 5 6 7 8 9 10
#include "StdAfx.h" ... LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { void (*fnc) () = Parameter; ... case WM_LBUTTOPNDOWN: Funktion(fnc); ... } ...
StdAfx.h
Code cpp:1 2 3
... #include "Datei.h" ...
Datei.h
Code cpp:1 2 3
... void Funktion(void (*Parameter())()); ...
Datei.cpp
Ich hoffe das ist genügend Code.Code cpp:1 2 3 4 5 6 7
... void Funktion(void (*Parameter())()) { ... Parameter(); .... } ...
Danke für eure Hilfe.
Geändert von üäpöol (19.05.12 um 19:01 Uhr) Grund: Wichtiges Detail vergessen
-
01.01.12 13:12 #15
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
Hi, also ich würde es so machen:
Datei.h
Code c:1 2 3
typedef void(__cdecl *func)(void); void Funktion(func);
Datei.cpp
Code c:1 2 3 4 5 6
void Funktion(func f) { // etlicher code... f(); // weiterer code... }
MAIN.cpp
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// Erstmal Prototyp definieren void __cdecl Parameter(void); /// etlicher Code void __cdecl Parameter(void) { printf("In der Funktion Parameter\n"); } /// weiterer etlicher Code LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // DIES WIRD NICHT BENÖTIGT!! void (*fnc) () = Parameter; ... case WM_LBUTTOPNDOWN: Funktion(Parameter); ... }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
Funktionsparameter
Von carlos1976 im Forum C/C++Antworten: 4Letzter Beitrag: 17.11.10, 11:08 -
[VB6] Funktionsparameter DLL
Von Tensi im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 12.11.08, 10:04 -
Wert aus void() funktion auslesen ?
Von trollchen im Forum C/C++Antworten: 7Letzter Beitrag: 07.04.08, 13:54 -
Funktion void(0)
Von cmyk-vienna im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 13.04.06, 08:07 -
string an eine void Funktion übergeben, warum geht es nicht?
Von Fridulin im Forum .NET ArchivAntworten: 4Letzter Beitrag: 17.03.05, 14:37



4Danke

Zitieren


Login






