Variablen verfall,sichtbarkeis und überschreibungs Problem
-
Hi all,
Ich bin gerade dabei ein Nebenprogramm in C++ zu schreiben dessen Aufgabe
es ist ein Vector zu erstellen und zu füllen.
Nun stehe ich for dem Problem das dieses Programm sich so oft wie nötig Aufrufen lassen muss, ohne dass meine alte Variable überschrieben wird.
Dies lässt sich nicht so einfach lösen wie es scheint wenn die Variable statisch oder global ist wird sie überschrieben wenn sie es nicht ist verfält
sie. Es kommt nicht in Frage von Anfang an einen Array/vector zu ertstellen
der die Daten aller Vectoren die ich erstellen will aufnimmt.
Meine Hoffnungen gehen in die Richtung ,dass das Progamm noch Nachträglich jedes mal eine globale/statische Variable erstellt, deren Zeiger ich dann weitergeben kann.
Ich bin gespannt wie man dieses Problem lösen kann.(Ich denke mal nicht das ich Code posten sollte, da ich das Ganze möglichst theoretisch halten will und euch das nur vom wesentlichen ablenken würde.)
schon mal Dank im Voraus, ich hoff ich kann mich auf euch verlassen

-
Ich bin gerade dabei ein Nebenprogramm in C++ zu schreiben dessen Aufgabe
es ist ein Vector zu erstellen und zu füllen.
Nun stehe ich for dem Problem das dieses Programm sich so oft wie nötig Aufrufen lassen muss, ohne dass meine alte Variable überschrieben wird.
Dies lässt sich nicht so einfach lösen wie es scheint wenn die Variable statisch oder global ist wird sie überschrieben wenn sie es nicht ist verfält
sie. Es kommt nicht in Frage von Anfang an einen Array/vector zu ertstellen
der die Daten aller Vectoren die ich erstellen will aufnimmt.
Meine Hoffnungen gehen in die Richtung ,dass das Progamm noch Nachträglich jedes mal eine globale/statische Variable erstellt, deren Zeiger ich dann weitergeben kann.
Ich bin gespannt wie man dieses Problem lösen kann.(Ich denke mal nicht das ich Code posten sollte, da ich das Ganze möglichst theoretisch halten will und euch das nur vom wesentlichen ablenken würde.)
Hallo!
Die Formulierung Deiner Anforderung ist Dir nicht ganz gelungen.
Zwischen "Programmaufrufen" musst Du Variableninhalte irgendwo auf der Festplatte speichern.
Ich vermute daher eher, dass Du "Funktionsaufrufe" meinst:
#include <vector> class YourType { //... }; // global std::vector<YourType> container; void YourFunction() { YourType y; // Neues y erzeugen // // Aktionen mit y // ::container.push_back(y); // Kopie von y sichern }Grüsse
*this
P.S.: Es wäre zur Lösung Deines Problems gut wenn Du Code posten würdest.
-
Ok du wolltest es so...
Die funktion bekommt den Namen einer datei in der Punkte von Dreiecken und noch ein paar infos enthalten sind. Dann noch ein zeicher um die daten später zu verknüpfen. Da model ein array ist brauchen wir dann noch c.
(Wahrscheinlich wird bool noch in void geändert)bool loadmodeldata (char a,model *b,int c) { int anz; //gibt anzahl der vertexe an befindet sie am anfang der datei fstream inOutFile(reinterpret_cast<const char*>(a),ios::out | ios::in | ios::binary); if (!inOutFile) { cout << "Fehler beim Oeffnen der Datei " <<reinterpret_cast<const char*>(a) << endl; system("Pause"); return false; } //weis nicht ob ich das wirklich brauch inOutFile.seekg(0,ios::beg); inOutFile.seekp(0,ios::beg); inOutFile.read(reinterpret_cast<char*>(&anz),sizeof(anz)); b->number[c]=anz; // so hier muss jetzt was geändert werden vector<SVertex>abc(anz); b->part[c]=reinterpret_cast<SVertex*>(&abc); for (int i=0;i<anz;i++) { inOutFile.read(reinterpret_cast<char*>(&abc[i].vPosition.x),sizeof(abc[i].vPosition.x)); inOutFile.read(reinterpret_cast<char*>(&abc[i].vPosition.y),sizeof(abc[i].vPosition.y)); inOutFile.read(reinterpret_cast<char*>(&abc[i].vPosition.z),sizeof(abc[i].vPosition.z)); inOutFile.read(reinterpret_cast<char*>(&abc[i].dwColor),sizeof(abc[i].dwColor)); inOutFile.read(reinterpret_cast<char*>(&abc[i].vTexture.x),sizeof(abc[i].vTexture.x)); inOutFile.read(reinterpret_cast<char*>(&abc[i].vTexture.y),sizeof(abc[i].vTexture.y)); } return true; }
-
....... schrieb:
Ok du wolltest es so...
Nein, ich "will" mir gewiss solchen Code nicht ansehen...
Deshalb
- bitte erstmal alle
reinterpret_cast<...>rausschmeissen! Verwende gleich die richtigen Typen dann musst Du auch nicht casten! Kompilierbar sein muss das Fragment dann aber auch! Also nicht einfach löschen sondern verbessern!
- Code formatieren, korrekt einrücken (mit 4 Leerzeichen) und die Variablen "sprechend" benennen z.B. "pModel" statt b, "index" statt c usw.
- "reinterpret_cast<char*>(a)" von einem char a - was soll sowas denn?
- Zumindest einen Ansatz von Fehlerbehandlung formulieren; die "for"-Schleife hängt völlig in der Luft
Wenn Du das alles verbessert hast schau ich gern nochmal drüber.
Vorher aber gewiss nicht!Grüsse
*this
P.S.: Dann bitte die - dann bitte ebenfalls ansprechend gestaltete - Deklaration von "model" mitposten!
-
@...: Deine Posts lesen sich wie inkohärentes Gebrabbel.
-
Gast++ schrieb:
- bitte erstmal alle
reinterpret_cast<...>rausschmeissen! Verwende gleich die richtigen Typen dann musst Du auch nicht casten! Kompilierbar sein muss das Fragment dann aber auch! Also nicht einfach löschen sondern verbessern!
Alle? Was ist mit
ios::binary?
-
@Gast++
1. Jeder hat seine Favoriten wie er Fariablen benennt die eh nicht global sind.
2.Du weist höffentlich schon was der reinterpret_cast hier macht.
(wenn nicht: ich habe eine Binärdatei geöffnet in der zwangläufig alle meine Werte in bytes zerstückelt wurden um diese nun wieder auszulesen kommt der cast zum einsatz)
3.was heist hier meine schleife hängt in der Luft. Sie sorg dafür das alle Daten nach einander ausgelesen und dann in meine Variable gespeichert werden.
Vertau einfach darauf das ich beim erstellen der Datei keine Fehler gemacht hab sonst kommt eh nur humbuck raus.Naja auch egal das ist sowieso der Teil des programms der einbahnfrei funktioniert.
ich will nur das meine
vector<SVertex>abc(anz);Variable auch nach dem Funktionsaufruf verfügbar bleibt ohne das sie auf irgenteine weise überschrieben werden kann. Ich hab da an sowas wie speicherreservieren gedacht.
ps:Jetzt wisst ihr warum ich keinen code posten wollte der eh keinen Zusammenhang hat und sich mit sicherheit auch nicht ohne weiteres komprilieren lässt.
-
wie er Fariablen benennt
Na dann is ja alles gut !

Happy Coding!
*this
-
Jetzt mal ganz bloed gefragt: per new auf dem heap anlegen und per delete wieder loeschen und den Zeiger herumreichen? Wenn nicht wieso nicht?