Wie können Daten von Quelldatei.c in Variable eingeschrieben und von anderer Quelldatei.cpp ausgegeben werden



  • Hallo alle,

    ich möchte, dass die Daten von einer Quelldatei test.c in die Variable eingeschrieben werden und von anderer Quelldatei cplus.cpp ausgegeben werden. Warum funktioniert es nicht? Wo ich Fehler gemacht habe?

    Ich arbeite unter Suse Linux10.0 und benute MinGw Kompiler.

    data.h

    #ifndef DATA_H
    #define DATA_H
    
    int a = 2; // zum Test
    
    struct data
    {
        int     lon;
        short   temp;
        char    buffLon[16];
        char    buffTemp[16];
    };
    
    struct data aData, *pData;
    
    #endif
    

    test.c

    #include "./data.h"
    
    int main()
    {
        a = 5;   // 5 soll in cplus.cpp ausgegeben werden
    }
    

    cplus.cpp

    #include "./data.h"
    #include <iostream.h>
    
    int main()
    {
        cout << a << endl;   // ausgabe ist 2, und nicht 5, warum?
    }
    

    vielen Dank im Voraus
    Ruyi



  • Vermutlich hast Du nichtmal beide Quellcodes zusammen in ein Programm gebunden, denn das ist die Hauptvoraussetzung dafür, dass das funktioniert. Du hast zwei unabhängige Programme, deren a nichts miteinander zu tun hat. Wäre es nicht so, würde sich bereits der Linker beschweren, nämlich darüber, dass a und main doppelt definiert sind (aData und pData auch). Denn ein Programm kann nur eine Funktion main haben.

    Darüberhinaus sind wir hier in ANSI C, da gibts kein cout. Und selbst in C++ heisst es seit gut neun Jahren std::cout, und das befindet sich nicht in <iostream.h> sondern in <iostream>

    Wenn Du wirklich mit globalen Variablen arbeiten willst, brauchst Du das Schlüsselwort extern. Und die Definition sowie Initialisierung der Variablen darf nur in einem der Quellcodes geschehen. Ein Beispiel (mit Respekt auf das Subforum in C):

    data.h

    #ifndef DATA_H
    #define DATA_H
    
    extern int a; // Deklaration. "Es gibt hier irgendwo eine Variable a"
    
    void sub(void); // "Es gibt hier irgendwo eine Funktion sub"
    
    #endif
    

    test.c

    #include "data.h"
    
    int a = 2; // Definition. "Hier steht der Speicherplatz für a"
    
    void sub(void) // dito
    {
        a = 5;   // 5 soll in main.c ausgegeben werden
    }
    

    main.c

    #include "data.h"
    #include <stdio.h>
    
    int main()
    {
        printf("%d\n", a); // Ausgabe ist 2
        sub();
        printf("%d\n", a); // Ausgabe ist 5
        return 0;
    }
    


  • Vielen Dank für den schnellen Antwort.

    Vermutlich hast Du nichtmal beide Quellcodes zusammen in ein Programm gebunden, denn das ist die Hauptvoraussetzung dafür, dass das funktioniert.Du hast zwei unabhängige Programme, deren a nichts miteinander zu tun hat.

    Ich habe ja zwei unabhängige Programme, ein(.c) schreibt Daten in Variable ein und anders(.cpp) holt Daten aus. Mein Problem ist, wie ich die zwei Programme, ein .c ist und anderes .cpp ist, zusmmenbinden kann?

    vielen Dank im Voraus

    Ruyi



  • Wenn das zwei eigenständige Programme sind, bekommt jedes beim Start seinen eigenen Speicher zugewiesen (und damit auf jeden Fall seine eigene Version der Variable). Das heißt, die müssten über eine externe "Leitung" miteinander kommunizieren (z.B. über eine Datei, die test.c per printf() füllt und test.cpp über einen fstream ausliest).


Log in to reply