Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » dynamisches feld in nem dynamischen feld ???????

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
21.01.2004, 16:57 Uhr
Darky



Wie kann ich den zeiger auf ein dynamisches feld welches in einem dynamischen feld steht neu aufbauen???

header

C++:
struct daten        
{
    struct datendaten
    {
        int zahl;
                          CString wort;

    }*feldfeld;
}*feld;



cpp

C++:
int x=10;
int y=20;

feld=new daten[x];
for(int c=0;c<10;c++)
{
        feld[c].feldfeld=new .........?[y];
}



oder geht das gar nicht??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.01.2004, 18:49 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du kannst von allem ein 2d-array anlegen ist egal von welchem datentyp...


C++:
int x,y;
x=100;y=1000; //oder wie gross auch immer
datentyp **my2d-array = new datentyp*[x];
for(i=0;i<x;++i)datentyp[i]=new datentyp[y];


//am ende das freigeben nicht vergessen



ob du dir dafür nur ein struct bastelst oder was auch immer spielt keine rolle...
ach so da du ja anscheinend new (also c++) benutzt (und nicht malloc) kannst du auch gleich eine Klasse verwenden das ist sinnvoller als das in ein struct zu schmeissen weil du dann die allokiererei und das speicherfreigeben dir automatisch vom Kon- bzw Destruktor machen lassen kannst...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 21.01.2004 um 18:50 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.01.2004, 11:26 Uhr
Darky



danke aber so richtig hilft es mir nicht da ich schon recht weit mit dem project bin(müsste zu viel ändern)!

so sieht es bis jetzt aus

documentclass-haeder

C++:
// Attribute
public:


      

    int patanz;                  
    int patanzback;              

    struct patientendaten        
    {
        CString fpatnr;                
        CString fanrede;        
        CString fvorname;        
        CString fname;            
        CString fgebtag;            
        CString fgebmon;        
        CString fgebjahr;            
        CString fverart;            
        CString fkasse;            
        CString fvernr;                  
        CString fstrasse;        
        CString fplz;            
        CString fort;          
        CString ftelefon;        
        CString fhandy;            

        

        int feintrag;
        struct diagnose
        {
            int dfbehtag;                
            int dfbehmon;            
            int dfbehjahr;            
            CString dfdiagnose;        
            CString dfmedikation;    
            CString dfbemerkung;    



        }*kartei;//<-das teil soll auch dynamisch sein        



    }*pdaten;


    int kassenanz;            

    struct kassen        
    {
        CString fkassenname;        
        CString fkassennr;            
        int fkassenart;                
    }*pkassendaten;


    //datenvariablen     ende                        CRAR



documentclass-cpp->Serialize

C++:
void CCRARDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // ZU ERLEDIGEN: Hier Code zum Speichern einfügen
        ar << patanz;
        ar << patanzback;
        for ( c=0;c<patanz;c++)
        {
            ar << pdaten[c].fanrede;
            ar << pdaten[c].fname;
            ar << pdaten[c].fvorname;
            ar << pdaten[c].fpatnr;//
            ar << pdaten[c].fgebtag;//
            ar << pdaten[c].fgebmon;
            ar << pdaten[c].fgebjahr;//
            ar << pdaten[c].fstrasse;
            ar << pdaten[c].fplz;
            ar << pdaten[c].fort;
            ar << pdaten[c].ftelefon;
            ar << pdaten[c].fhandy;
            ar << pdaten[c].fkasse;
            ar << pdaten[c].fvernr;
            ar << pdaten[c].fverart;
            ar << pdaten[c].feintrag;  
        }

        ar << kassenanz;
        for (c=0;c<kassenanz;c++)
        {
            ar << pkassendaten[c].fkassenname;
            ar << pkassendaten[c].fkassennr;
            ar << pkassendaten[c].fkassenart;
        }
        

    }
    else
    {
        
        
        if(patanz>0)
        {
            /*
            for(c=0;c<patanz;c++)
            {
                delete [] pdaten[c].kartei;
            }*/


            delete [] pdaten;
            delete [] pkassendaten;
        }
        // ZU ERLEDIGEN: Hier Code zum Laden einfügen
    
        ar >> patanz;

    
        pdaten=new patientendaten[patanz+10];

        ar >> patanzback;
        for ( c=0;c<patanz;c++)
        {
            ar >> pdaten[c].fanrede;
            ar >> pdaten[c].fname;
            ar >> pdaten[c].fvorname;
            ar >> pdaten[c].fpatnr;
            ar >> pdaten[c].fgebtag;
            ar >> pdaten[c].fgebmon;
            ar >> pdaten[c].fgebjahr;
            ar >> pdaten[c].fstrasse;
            ar >> pdaten[c].fplz;
            ar >> pdaten[c].fort;
            ar >> pdaten[c].ftelefon;
            ar >> pdaten[c].fhandy;
            ar >> pdaten[c].fkasse;
            ar >> pdaten[c].fvernr;
            ar >> pdaten[c].fverart;

            ar >> pdaten[c].feintrag;

            pdaten.kartei=new ???..diagnose[feintrag+10];//wie muss ich den  
            //neuaufbau definieren?? muss da was gecastet werden wie halt?
        
        
        }

        ar >> kassenanz;

        pkassendaten=new kassen[kassenanz+10];

        for (c=0;c<kassenanz;c++)
        {
            ar >> pkassendaten[c].fkassenname;
            ar >> pkassendaten[c].fkassennr;
            ar >> pkassendaten[c].fkassenart;
        }
    }
}




Dieser Post wurde am 23.01.2004 um 11:37 Uhr von Darky editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.01.2004, 11:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm also das mit CStrings zu machen... es gibt doch einen std::string der ist viel freundlicher und kompatibler...aber seies drum...

ich würde es so probieren allerdings bleibt dir das problem das du ständig von hand nachallokieren musst... das ist super unfreundlich und fehleranfällig
und du musst eigentlich noch ne variable mit dir führen die dir sagt wieviele einträge du schon im array hast... und eventuell eine die dir sagt viewiel platz noch im array ist (falls du nicht immer nachallokieren willst und schon immer ein bisschen speicher vorreservierst....


C++:
typedef struct{
            int dfbehtag;                
            int dfbehmon;            
            int dfbehjahr;            
            CString dfdiagnose;        
            CString dfmedikation;    
            CString dfbemerkung;    
}diagnose

typedef struct{

        CString fpatnr;                
        CString fanrede;        
        CString fvorname;        
        CString fname;            
        CString fgebtag;            
        CString fgebmon;        
        CString fgebjahr;            
        CString fverart;            
        CString fkasse;            
        CString fvernr;                  
        CString fstrasse;        
        CString fplz;            
        CString fort;          
        CString ftelefon;        
        CString fhandy;            
        int feintrag;
        diagnose *kartei;
      }patientendaten;


verwenden ist dann in ewta so
patientendaten *pdaten= new patientendaten[10]; //10 oder wie gross dein puffer auch immer sein soll...

wenn du dann für einen patienten eine diagnose stellens musst dann allokierst du einfach speicher für die kartei

patientendaten[3].kartei=new diagnose[10]; //oder weiveil auch immer für patient nummer 4...




also ich weiss ja nicht wie die anderen dass sehen aber wenn du die ganze allokierei wirklich von hand machen willst... dann wird das ein richtiger spass... (oder wie sehen das die anderen)...
Ich würde dir wirklich empfehlen:
1.)verwende std::string statt CString...
2.)mach das ganze in einer klasse (an sonten wirst du ewig und 100 Jahre mit dem dubuggen beschäftigt sein um speicherfehler zu suchen)
3.) verwende std::vector oder eine andere Containerklasse aus der stl... das nimmt dir die ganze speicherabeit ab und du kannst damit genauso arbeiten wie mit einem array nur das du dich um nichts kümmern musst...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 23.01.2004 um 11:44 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.01.2004, 20:55 Uhr
Darky



wie sieht so ne speichklasse aus und was hat das teil für ne basisklasse??
hab damit noch nix zu tun gehabt!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.01.2004, 21:05 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Hi Darky,
kannst dir z.b. diesen Thread von haribobär anschauen...

da ist einmal ein beispiel dabei wie man es ohne std::vector mit lästiger allokierei macht und einmal mit std::vector...

in deinem fall wäre die allokierei besonders lästig weil man das ja 2d-machen müsste...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.01.2004, 13:42 Uhr
RHBaum



Und da er bereits mit der MFC arbeiten, ind die ach so teufliche CString klasse verwendet, warum dann nicht gleich CArray ??? Was sich ueberigens recht leicht in einem CArchive serialisieren laesst ?

Warum immer mit Krampf die STL, zumal sie bei dem, was man hier sieht, eigentlich keinen Vorteil bringt ... wahrscheinlich eher langsamer ist als die eh schon eingebundene MFC ?

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.01.2004, 17:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Jetzt muss ich mir schon von RHBaum sagen lassen wie geil doch die MFC ist und das ich nicht auf dem armen CString rumhacken soll...
Irgendwie stimmt doch da was nicht, komm mir vor als wenn ich gerade für die falsche Seite gespielt habe ...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.01.2004, 11:03 Uhr
RHBaum



Es gibt keine gute und boese Seite, keinen guten oder schlechten Ansatz, nur User und Programmierer :-)

Und wenn man zur letzteren Gattung gehoeren will, sollt man ein bisserl "weiter" denken und ned nur von Vorurteilen leben :-) (ist jetzt kein Vorwurf) !

Ich mein STL ist ne Gute Sache, ohne Frage, weil Sie ist halt der Standard, man kann Sich (fast) immer auf Sie verlassen, weil Sie ist halt auch immer da :p gibt kaum c++ compiler, die die STL header und die IO lib ned bei haben.
Aber es gibt halt Faelle und leute, die Verschreiben sich dem Teufel :-) Und manche haben sogar echt Greunde dafuer . And warum soll der dann ned in die Kneipe gehen, seine Seele ist eh schon hinueber, anstatt enthaltsam zu leben und auf die obskuren Freuden des Lebens zu verzichten ??? :p

Und STL ist halt ned fuer alle faelle perfect, grad mit den Strings ....
nen STL string kannst immer nur kopieren, du hast keine chance auf den puffer schreibend drauf zu kommen, ohne den String zu zerstoeren.
Ist besonders laestig wenn man C-Funktionen (API's) bedienen muss, die sowas tun. geht mit STL nur sehr umstaendlich ueber zwischenpuffer, der CString ist da flexibler ... nur mal so am rande.

DIe STL ist halt mehr auf primaerere Sachen und Streams, simple konsolen ein und ausgabe ausgelegt, die Biblo coantainer / Strings eben direkt auf die Zusammenarbeit mit den anderen Objekten in der Bibo. Warum das ned nutzen?

AUf alle Faelle hast recht, man sollte alle Moeglichkeiten erwaegen, und die beste raussuchen ... und mit der STL kommt frueher oder spaeter jeder in beruehrung.

Auserdem, sind wir hier doch im MFC/VC++ Forum, also direkt in der Hoelle, also Klappe und schippe weiter schwefel, damit das "Boese" gedeiht !

Ciao ...

Dieser Post wurde am 30.01.2004 um 11:12 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.01.2004, 13:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@RHBaum
Ich glaub du hast mich nicht richtig verstanden... Eigentlich bin ich hier meist der einzige "Linuxhasser" im Forum...Die wollen mich hier alle bekehren...
Deshalb kam mir das so vor als wenn ich gerade für die falsche Seite gespielt habe, weil ich mal ausnahmsweise was nicht pro Windows bzw. MFC empfohlen hatte...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: