Struct als Rückgabewert



  • Hallo zusammen,

    ich habe folgendes Problem:
    In einer Header-Datei, nennen wir sie cXMLVCL.h versuche ich eine XML-Datei zu parsen, was soweit auch ganz gut funktioniert. Nun ist es aber so, daß meine Parser-Funktion das Ergebnis als Struct verpackt zurückgeben soll.

    In der aufrufenden .cpp-Datei soll das Ganze natürlich auch als Struct entgegengenommen werden. Ich bastele mir also vorher in der .cpp-datei eine Struct, die der der Header-Datei identisch ist, erzeuge einen Zeiger auf diese Struct und weise diesem Zeiger das Ergebnis der Parser-Funktion aus meiner Header-Datei zu. Das funktioniert jetzt allerdings nicht so wie ich mir das vorgestellt habe (wäre ja auch zu schön gewesen)...

    Zur Orientierung hier noch ein paar Auszüge aus meinem Quellcode...wäre super, wenn mir jemand weiterhelfen könnte. Danke schon mal im Voraus,

    Zippo

    struct XMLInfo{
                    AnsiString	 Name;
    	         bool		 Visible;
    	         bool		 Enabled;
                     AnsiString	 Key;
                     AnsiString       Text;
                     TStringList      *Items;
                    };
    
    	struct XMLInfo * getline(char * _buffer, string xml)
    	{
    
    		string line;
    		char zeile[1000];
                    TStringList * Items = new TStringList;
                    XMLInfo *info;
    
    		std::fstream FStream;
    
    		FStream.open(_buffer, std::ios::in);
    
    		if(FStream.good())
    		{
    
    			FStream.seekg(0, std::ios::beg);
    
    			while(!FStream.eof())
    			{
    				FStream.getline(zeile, 1000);
    				line = string(zeile);
    
                                    int pos = line.find(xml, 0);
    
    				if(xml == XMLNodeMod)
    					MODULE(line);
    				if(xml == XMLNodeView)
    					VIEW(line);
    				if(line.find(xml) != -1 && line.find(XMLNodeForm) != -1)
                                    {
                                            XMLInfo *info;
                                            info = FORMREFERENCE(line);
    
                                            FStream.getline(zeile, 1000);
                                            line = string(zeile);
                                            //FORMREFERENCE(line);
                                            while(line.find(XMLNodeData) != -1)
                                            {
                                                    AnsiString content;
    
                                                    content = DATA(line);
                                                    Items->Add(content);
                                                    FStream.getline(zeile, 1000);
                                                    line = string(zeile);
                                                    /*if(content == "")
                                                            return Items; */
                                                    info->Items->Add(content);
                                            }
                                            return info;
                                    }
    

    soviel zur Header-Datei und nun noch ein Schnippsel aus der .cpp

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
        cXMLVCL data;
            struct Datainfo{
    	        AnsiString	 Name;
    	        bool		 Visible;
    	        bool		 Enabled;
    	        AnsiString	 Key;
    	        AnsiString       Text;
    	        TStringList      *Content;
                   };
    
            Datainfo *ptr;
    
      string name1 =  "kdb_gruppe_reference_ref_gruppengroesse_id";
      ptr=data.getline("kdb_gruppe_objecttype_mdb_gruppe_XML_Output.txt", name1);
      for(int i = 0; i < ptr->Content->Count; i++)
      {          kdb_gruppe_form_mdb_gruppe_ref_gruppengroesse_id->Items->Add(ptr->Content->Strings[i]);
      }
    


  • wo liegt dabei der Fehler??
    weil wenn man sich nur Code durchliest, ohne einen Fehler spezifiziert vorliegen zu haben sucht man sich nen Ast



  • Sorry, den Fehler hab ich jetzt glatt vergessen...
    Der Compiler spuckt mir folgenden Fehler aus:

    [C++ Error] Unit1.cpp(60): E2034 cannot convert 'cXMLVCL::XMLInfo*' to 'Datainfo*'

    Zippo



  • Naja, du gibst nen Zeiger von XMLInfo auf und willst den in Datainfo reinschreiben, klingt logisch, dass des net geht, wenn hier nicht mit Polymorphie gearbeitet wurde



  • Sagt mal was ist der unterschied zwischen klassen und strukturen?? vor ein paar tagen wusst ichs noch, doch dann hab ich in einem buch gesehen wie der autor asuch für structs, konstruktoren und methoden schreibt... 😕
    thx 🙂



  • klassen und structs sind afaik in C++ so ziemlich das gleiche, nur, dass du beispielsweise in C++ bei structs keine Zugriffsmodi vereinbaren kannst



  • Vorden schrieb:

    dass du beispielsweise in C++ bei structs keine Zugriffsmodi vereinbaren kannst

    stimmt nicht. der unterschied ist einfach nur das class von haus aus private ist und struct public. aber modis kannst du bei beiden angeben.



  • hesst das also dass es sch**** egal ist was man von beidem benutz??? und weshalb wird faast nirgends davon gesprochen, dass sie fdast das gleiche sind??? 😕 z.B. in vielen Büchern..



  • JossBoss schrieb:

    hesst das also dass es sch**** egal ist was man von beidem benutz??? und weshalb wird faast nirgends davon gesprochen, dass sie fdast das gleiche sind??? 😕 z.B. in vielen Büchern..

    ich habe es schon in büchern(kommt auf das buch an :D) und tutorials gelesen
    bsp: http://www.cpp-tutor.de/cpp/le09/le09_01.htm
    buch fällt mir gerade keins ein


Anmelden zum Antworten