Variablenwerte in einer andere Datei übergeben
-
Hallo,
folgendes Problem: ich habe ein Visual C++-Workspace mit zig CPP- und Headerdateien. In einer CPP-Datei wird nun ein Wert ermittelt, der nicht nur in dieser sondern auch in einer anderen Datei verwendet werden soll. Dort soll er unter anderem in eine txt-Datei geschrieben werden. Ich könnte natürlich nun in der einen Datei den Variablenwert, den ich in der anderen nutzen möchte, in eine txt-Datei schreiben um ihn dann in der anderen CPP-Datei einzulesen und in eine andere txt-Datei zu schreiben. Das halte ich aber für umständlich. Gibts da nicht noch andere (einfache !) Möglichkeiten ?
Globale Variablen kann man ja wohl leider nur innerhalb einer Datei (jedoch über Funktionen hinweg) nutzen...
-
Du könntest die Variable in einem Header deklarieren ("extern int my_var;") und in deiner CPP-Datei dann definieren - dann kann jeder darauf zugreifen, der den Header kennt.
Oder du kannst den betreffenden Wert zwischen den Funktionen als Parameter bzw. Rückgabewert rumreichen.
-
Also wenn ich meine zu "übergebene" Variable ("test") in der Headerdatei deklariere, die zu der Datei gehört, in der der zu übergebende Wert ermittelt wird und ich diese Headerdatei dann in der anderen CPP-Datei include, kommt folgendes:
error LNK2001: unresolved external symbol "class CString test" (?test@@3VCString@@A)
ARMV4Rel/Panel.exe : fatal error LNK1120: 1 unresolved externalsWatt hat das mit dem class CString auf sich ??? Ich raff das nicht...
-
Gib am besten mal einen Quelltext an, wo der Fehler auftritt.
Zum Vorgehen nochmal genauer:
Die Variable gehört zu irgendeiner deiner Quelltext-Dateien (wenn sie niemandem konkret zugeordnet werden kann, such dir EINE aus), in der wird sie auch definiert. Im zugehörigen Header wird die Variable nur noch deklariert - der Linker kümmert sich dann später um die richtige Zuordnung, wenn er aus den einzelnen OBJ-Dateien eine EXE macht://TestKlasse.h //viele andere Deklarationen (z.B.): class TestKlasse { TestKlasse(); TestKlasse(int x1,std::string x2); //... }; extern TestKlasse my_var; //TestKlasse.cpp #include "TestKlasse.h" //Definition der TestKlasse-Methoden TestKlasse::TestKlasse() {...} TestKlasse::TestKlasse(int x1,std::string x2) {...} TestKlasse my_var(7,"Echo"); //andere CPP #include "TestKlasse.h" #include "andereKlasse.h" //...
-
Schönen Dank für den Code, habs so mal ausprobiert, aber irgendwie wirds nichts. Vermutlich krieg ichs mit der Struktur des Programms nicht so auf die Reihe. Muss das nur editieren, nicht neu schreiben, daher hakts an so einigen Stellen gerade und es ist schwer nen Quellcode-Teil zu posten. Aber es muss doch irgendwie ganz einfach ohne viel dam-dam möglich sein, einen EINZIGEN Variablenwert (eine einzige Fließkommazahl) in einer andere Datei zu kriegen.
-
Was für eine Fehlermeldung kommt denn überhaupt?
Ansonsten noch etwas: Der ganze Stapel CPP-Dateien wird am Ende zu einem einzigen Programm zusammengepackt, richtig? (wenn nicht, bleibt dir nur der Weg, den Wert auf Festplatte zwischenzuspeichern)
*irgendwie wird mir deine Frage umso unklarer, je länger ich mir den Thread ansehe*
-
Wenns für einen Wert geht, gehts für alle, will sagen das ist ein prinizipielles Problem, und hat nichts damit zu tun, ob du einen "EINZIGEN" oder tausend Stück davon willst^^
So wie sieht denn die Variable aus? Wenn sie global in einer Headerdatei steht, musst du überall dort, wo du sie aufrufst
extern float <name>;
hinschreiben. Dadurch wird der Linker informiert, dass die Variable woanders steht.
Nur wer mag schon globale Variablen ... . Du könntest z.B. auch ne get-Funktion schreiben.
-
Ja, der ganze "Stapel" .h-, .cpp-, .rc-Dateien wird zu einer exe.
Ich bastel die ganze Zeit herum, hab also nicht mehr die Fehlermeldung, die aus Deinem Codebeispiel resultiert, sondern andere. Muss das eben mal wieder umbauen zu dem, was Du da mit den Funktionen gepostet hast.
Mein ganzes Problem ist einfach nur: in Datei 1 steht beispielsweise in der Variablen var1="Hallo Peter";
In Datei 2 schreibe ich UNTER ANDEREM alle Hallo xy's in eine txt-Datei. Daher brauche ich den Wert der Variablen 1 in Datei 2. Denn "Hallo Peter" wird dynamisch erzeugt und es könnte demnach auch "Hallo Jochen" sein.
Also ganz, ganz, ganz einfach den Wert der Variablen 1 nach Datei 2 schicken. Wie geht das ???
(Schicke gleich nochmal meine Fehlermeldungen, die aus Deinem Code resultieren)
-
Man, ich hab doch keine Ahnung ! Was heißt, ich muss überall extern CString <name>; hinschreiben ???????? Ich denke nur in die Headerdatei der cpp-Datei wo man die globale Variable definiert ??? Meine Variable heißt gerade testvar und ich hab extern float testvar; eben einfach mal ÜBERALL hingeschrieben, was aber nichts an den oben bereits geschriebenen Fehlermeldungen geändert hat (wobei ichs da noch mit nem CString probiert hatte).
Und wie geht das mit der get-Methode ? Ich bin mega Newbie ! Ich geh mal auf die Suche bei Google.
-
//Datei1.h #include<string> void writeHallo(); std::string getName(); extern std::string var1; //Datei1.cpp std::string var1; void writeHallo() { var="Hallo "+getName(); } std::string getName(); { return /*irgendein Name*/; } //Datei2.cpp #include <fstream> #include "Datei1.h" void printHallos(int n) { //nutzt den Inhalt von var1 }
Aber noch günstiger wäre es wohl, wenn du stattdessen direkt die Funktion in Datei1 aufrufst, die die Variable füllen soll (und die so umstellst, daß sie den Wert als Rückgabe liefert - globale Variablen sind meist unnötig).