Hallo, mein C-Programm bricht ab wenn ich eine C++ Member-Funktion aufrufe, die auf Member-Variablen zugreift. Gibt es dafür eine Lösung? Vielen Dank im Voraus für Eure Antworten.
ja, man muss es richtig machen. Was erwartest du von uns, im normfall geht es also wird der Fehler in deinen Code stecken?
Deine C++-Funktion muss als static deklariert werden, weil C keinen this-Pointer kennt. Um nun auf Membervariablen zugreifen zu können, muss der this-Pointer irgendwo anders herkommen.
Ich möchte bitte ein Beispiel wie man in C++ geschriebene Funktionen in C aufruft. z.B. Ich habe folgenden C++ Code class M { ... public: void test(); int var_test; }; extern "C" void M::test() { var_test = 1; // Zeile 1 cout << "Das ist ein Test"; // Zeile 2 } Mein C Programm führt die "Zeile 2" aus, falls Zeile 1 nicht da ist. Ansonsten endet das Programm mit einer Fehlermeldung von Windows. Ich hoffe, dass ich mein Problem verständlich formuliert habe. Danke an rufus, heißt das jetzt static void test() ? Habe versucht zu kompilieren aber es funktioniert nicht.
sie stellt du dir denn das vor das es gehen soll? Du hast ja gar kein Object in C. Wenn du jetzt auf ein Member zureifen willst von welchen Object denn?
Es ist so, dass ich ein C++ Programm habe und möchte die Funktionen in diesem Programm für mein C Programm benutzen. Diese Funktionen sind Member-Funktionen einer Klasse und greifen auf Membervariablen derselben Klasse zu. Da ich sehr sehr wenig über C++ weiss, bitte ich um Eure Hilfe. Falls es gehen soll, dann freue ich mich sehr. Sonst habe ich wieder was neues gelernt, dass mein Vorhaben so nicht möglich ist.
du müsstest du Methode und dem Member variable als Static deklarieren, aber danach wird das C++ Programm vermutlich nicht mehr laufen, weil es dann mehre Objekte mit der gleichen Member Variable gibt. Schreib es lieber als C und vergiss denn C++ teil.
Dann muss ich wohl den C++ teil lassen :-). Danke Peter.
Oder aber du schreibst dein Programm als C++ Programm. Legst ein entsprechendes Objekt an und rufst dessen Memberfunktionen auf. C++ mit C zu kombinieren ist einfach C mit C++ zu kombinieren hingegen nicht.
Danke Karl Heinz für den Tipp. Ich bleibe wohl zuerst beim C. C++ wird ein Vorsatz fürs nächste Jahr sein :-).
ccom schrieb: > Danke Karl Heinz für den Tipp. Ich bleibe wohl zuerst beim C. C++ wird > ein Vorsatz fürs nächste Jahr sein :-). Wenn du halbwegs vernünftiges C schreibst, dann wird dir ein C++ Compiler da nicht allzuviel auszusetzen haben. Die Unterschiede zwischen dem C-Subset von C++ und der zur Zeit aktuellen C-Definition werden zwar größer, aber die meisten C Programme werden auch heute noch von einem C++ Compiler klaglos und korrekt übersetzt. Und wenn nicht, handelt es sich meistens um Dinge, die von vorneherein im (älteren) C Code schon dubios waren und ohnehin bereinigt werden sollten. Niemand sagt, dass du in C++ mit Klassen und Membern hantieren musst. Man kann einen C++ Compiler auch als eine Art besseren C Compiler benutzen (und viele sog. C++ Programmierer tun dies auch. leider). D.h. du schreibst dein 'C' nach wie vor so, wie du es immer getan hast. Allerdings kannst du bei Bedarf auch einfach ein Objekt anlegen und von diesem Objekt eine Memberfunktion aufrufen :-) Und das war ja dann schliesslich das Ziel der Übung.
Man kann sehr wohl C und C++ mischen. Was aber zum, Aufruf von C++-Methoden aus C heraus nötig ist, daß man im C++-Teil eine Funktion schreibt (also außerhalb aller Klassen). Diese muß dann selbst sehen, über welches Objekt sie welche Methode aufruft und was sie an C-konformen Sachen liefert - mit einem Objekt als Rückgabewert kann ja der C-Aufrufer nichts anfangen. Wenn man diese zusätzliche Funktion dann noch als
1 | extern "C"... |
deklariert, steht dem Glück nichts mehr im Wege. Gleich alles in C++ zu schreiben, ist natürlich der direkte Weg, wie bereits erwähnt.
Dies ist ein schönes Beispiel, wie Leute sich immer wieder neue Probleme machen, nur weil sie versuchen dem ersten Problem (C++ lernen) einfach aus dem Weg zu gehen.
Stimmt. Klaus Wachtler schrieb: > Was aber zum, Aufruf von C++-Methoden aus C heraus nötig > ist, daß man im C++-Teil eine Funktion schreibt (also > außerhalb aller Klassen). sorry für den Satz.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.