PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Strukturen abspeichern (2.)



08-02-2001, 11:31
hi,
ich habe bereits vor einigen wochen eine frage zum thema "speichern eigener variablentypen" gestellt und auch gute ideen bekommen.
leider klappt es nicht so richtig wie ich es will:
..


vector<DATAFR> dfr;
while(row=mysql_fetch_row(result)){
DATAFR d;
d.feld1=row[0];
d.push_back(d);
i++;
}

..
die verwendung von stl machte mit zwar das arbeiten mit listen leichter, aber bei der speicherung werden immer nur die speicheradressen abgelegt. und nach mysql_free_result sind die daten weg (natürlich auch beim erneuten programmstart http://www.linuxforen.de/ubb/frown.gif )

deshalb suche ich weiter nach ideen oder code zum speichern...

olli

08-02-2001, 13:43
Ich kann hier nur wieder mein Beispiel vom letzten mal posten.


#include &lt;iostream.h&gt;
#include &lt;stdio.h&gt;
#include &lt;vector.h&gt;

typedef struct {
int wert1;
int wert2;

} DATA;
int main() {
vector&lt;DATA&gt; dfr;
int data[]={1,2,3,4,5,6,0};
int *row=data;
while((*row)){
DATA d;
d.wert1=row[0];
d.wert2=row[1];
dfr.push_back(d);
row+=2;
}
FILE* fp=fopen("stl.dat","w");
for (vector&lt;DATA&gt;::iterator i=dfr.begin();i!=dfr.end();i++) {
fwrite((DATA*)i,1,sizeof(DATA),fp);
}
return 0;
}

Das (DATA*) ist wichtig. Du must bei STL die Iteratoren (die ja nur so ne Art intelligente Pointer sind) dereferenzieren um an den Inhalt zu kommen.
Poste doch mal die Deklaration von DATAFR;
ist d.feld1 vielleicth ein Pointer?

08-02-2001, 15:19
----------------
hatte ich ja probiert, aber bei mir wurde immer folgende zeile mit einem fehler bemängelt

for (vector<DATA>::iterator i=dfr.begin();i!=dfr.end();i++) {
----------
die struktur von dfr war sowohl mal *char als auch nur mal ein char, leider keine int. es snid (im endstadium) fast nur zeichenketten...

olli

[Dieser Beitrag wurde von lolli am 08. Februar 2001 editiert.]

[Dieser Beitrag wurde von lolli am 08. Februar 2001 editiert.]

08-02-2001, 15:41
Kannst du die Fehlermeldung mal angeben?

wenn Du statt char*

string (#include &lt;string&gt; ) benutzt tust Du dir viel leichter (Wenn schon in c++).

Natuerlich genugt fuer char* keine = da muss schon strcpy und dynamische speciherverwalutng ran, aber mit der string Klasse kannst de das auch wieder sparen.




[Dieser Beitrag wurde von jgbauman am 08. Februar 2001 editiert.]

08-02-2001, 17:21
hab das beispiel mal unter vc++ als consolenanwendung erstellt, gab folgende fehler (s.u.)
ist mit den bibliotheken evtl. was nicht i.o. (?). unter suse mit cc sah es ähnlich aus, hab aber die ausgabe grad nicht da

das anspechen der werte (dfr.operator[](1) klappt ja noch, aber es sind wieder nur die speicherpos. abgelegt, also nach free_result ist wieder alles weg

gibts es denn wirklich keine andere lösung?? unter VB wars damals so schön einfach. einzeln abspeichern ist aber nicht drin. es sind zu viele einzelne werte


olli

Kompilierung läuft...
save1.cpp
G:\projekte\save1\save1.cpp(37) : error C2653: 'vector<struct st_datafr,class std::__default_alloc_template<0,0> >' : Keine Klasse oder Namespace
G:\projekte\save1\save1.cpp(37) : error C2065: 'iterator' : nichtdeklarierter Bezeichner
G:\projekte\save1\save1.cpp(37) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'i'
G:\projekte\save1\save1.cpp(37) : error C2065: 'i' : nichtdeklarierter Bezeichner
G:\projekte\save1\save1.cpp(37) : error C2440: '=' : 'struct st_datafr *' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
G:\projekte\save1\save1.cpp(37) : error C2446: '!=' : Keine Konvertierung von 'struct st_datafr *' in 'int'
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
G:\projekte\save1\save1.cpp(37) : error C2040: '!=' : 'int' unterscheidet sich von 'struct st_datafr *' in bezug auf die Anzahl vorgenommener Dereferenzierungen
G:\projekte\save1\save1.cpp(37) : error C2146: Syntaxfehler : Fehlendes ')' vor Bezeichner 'i'
G:\projekte\save1\save1.cpp(37) : warning C4552: '!=' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
G:\projekte\save1\save1.cpp(37) : error C2059: Syntaxfehler : ';'
G:\projekte\save1\save1.cpp(37) : error C2059: Syntaxfehler : ')'
G:\projekte\save1\save1.cpp(37) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
Fehler beim Ausführen von cl.exe.

save1.exe - 11 Fehler, 1 Warnung(en)

13-02-2001, 15:22
Such einfach in der Online-Hilfe von VC++ Beisiele zu vector, etc (Die gabs zumindest unter VC++ 5.0 noch und waren recht anschaulich). Da solltest du dann genau sehen wie Microsoft sich die STL so vorstellt (Wie die Header-Datein heissen, etc). Hab hier leider (oder auch nicht leider) kein VC++ und kann grad nicht weiterhelfen.