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

Gast #1925321
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 #1925327
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?
Gast #1925348
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
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
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
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.
Gast #1926160
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.