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.hconst 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.