Zugriff auf Member-Variablen einer Klasse in "C" nicht möglich?

Gast #1925321
Lesenswert?

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.
Gast #1925348
Lesenswert?

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.
Gast #1925350
Lesenswert?

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.
#1925514
Lesenswert?

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.
#1926157
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren