Extern verwenden



  • Hallo Leute,

    wie verwende ich eigentlich extern?
    Wie muss es aussehen wenn ich eine funktion, eine klasse und eine variable in einer datei definiere, und in der anderen verwenden will... 0/



  • Hi,

    du definierst die Variable entsprechend in einer Quellcodedatei. In einer anderen schreibst du dann:
    extern typ name;

    wobei typ und name natürlich mit der Variable übereinstimmen müssen, dann hast du Zugriff.

    Eisflamme



  • eben nicht...

    unit2.cpp

    const int pi=3.14;
    double mul(int a,int b){return a*b;}
    

    unit1.cpp

    int main()
    {
    {
    double x=10,y=100;
    cout<<extren double mul(x,y);
    }
    return 0;
    }
    

    bekomme immer Linker Fehler, unresolved external _pi referenced from (mein Projektpfad)
    In dem Pfad sind aber alle Dateien drinne!



  • ps:

    über main steht natürlich noch:

    extern const int pi;
    

    und unten funktion is extern und nciht extren



  • [EDIT] Sind das die ganzen Dateien? Du musst in beiden noch dieselbe Header-Datei einfügen. Sieht dann so aus:

    // foo.h
    
    double mul(double, double);    // wieso int als Parameter?
    extern double const pi;    // int pi ist nicht das, was du willst
    
    // foo.cpp
    
    #include "foo.h"
    double mul(double a, double b) { return a*b; }
    double const pi = 3.14159265;
    
    // main.cpp
    
    #include "foo.h"
    #include <iostream>
    
    int main()
    {
        std::cout << mul(5.6, 7.0);
    }
    


  • Am besten, du arbeitest mit Header-Dateien, in der du alle Deklarationen packst und in den Source-Dateinen dann mit #include "..." einbindest.

    Für dein Beispiel also:
    mul.h

    const double pi = 3.14159265;
    double mul(double a, double b); // extern kann bei Funktionen entfallen
    

    mul.cpp

    #include "mul.h"
    
    double mul(double a, double b)
    {
      return a * b;
    }
    

    main.cpp

    #include "mul.h"
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      double x, y;
      cin >> x;
      cin >> y;   
      cout << "Ergebnis der Multiplikation: " << mul(x,y);
    
      return 0;
    }
    


  • hm....wofür brauch ich dann überhaupt extern?



  • Würdest du das extern im Header weglassen, hättest du 2 Instanzen in 2 ÜEs. Dass macht dein Linker aber nicht mit. Deshalb schreibst du das extern zuvor und hast deine Deklaration für den Compiler.


Anmelden zum Antworten