foreach in C++?



  • Ich könnt schwören der Beitrag war vorher noch nicht da 😉 hab den echt nicht gesehen sorry. Aber du hast den Code falsch übersetzt.

    Der C# Code vergleicht n.Text mit den vorletzten Buchstaben von parts.
    Der C++ Code dagegen vergleicht n.Text mit dem String parts von der ersten bis zur vorletzten Stelle.

    mfg Karsten



  • Talla schrieb:

    Foreach ist kein Sprachmittel von C++! Du hast ja sogar selber geschrieben dass es in die Standardlibrary gehört, und Sprache an sich und Klassenbibliothek ist nen himmelweiter Unterschied.

    Hmm? Da irrst du aber.



  • @Talla Kein Problem!

    Ich werde morgen den Quelltext verbessern (ist heute zu spät). Sobalt das Teil funktioniert poste ich den mal vollständig hier im Forum 🙂 .



  • 🙂 schrieb:

    Talla schrieb:

    Foreach ist kein Sprachmittel von C++! Du hast ja sogar selber geschrieben dass es in die Standardlibrary gehört, und Sprache an sich und Klassenbibliothek ist nen himmelweiter Unterschied.

    Hmm? Da irrst du aber.

    Wobei? Foreach ist kein Sprachmittel von C++. Und das zwischen Sprache an sich und Klassenbibliothek nen Unterschied ist dürfte doch auch klar sein oder?



  • Ok, das Problem mit dem String habe ich jetzt gelöst! 🙂

    Nun habe ich folgenden Quelltext das Problem, dass ich das Schlüsselwort ref nicht zu übersetzen weiß. Laut MSDN wird dadurch die entsprechende Variable in der aufrufenden Funktion geändert. Meine erster Gedanke war deshalb, Zeiger zu verwenden, aber ich habe wiederum keinen Idee, wie dass gehen sollte, da die normale Deklaration, bereits mit Zeigern zu tun hat.

    private static void searchNode(string[] parts, ref TreeNode parentNode, TreeNodeCollection nodes)
    
    private static void searchNode(String * parts[], TreeNode * parentNode, TreeNodeCollection * nodes)
    


  • Also,

    ich habe den Quelltext nun vollständig übersetzt. 🕶
    Aber ich habe festgestellt, dass bereits das Original anscheinend einen Bug hat: Haben nämlich die Knoten im TreeView alle den gleichen Text, so kann die load-Funktion sie nicht mehr unterscheiden und packt alle Elemente in die gleiche Ebene! 😡

    Ich habe mich noch mal auf der Quellseite umgesehen und in einem Kommentar http://www.codeproject.com/cs/miscctrl/loadandsave.asp#xx461059xx entdeckt, dass es eine vorgefertigte Speicherfunktion geben soll! 😕

    Jetzt stelle ich mir die Frage, was einfacher ist: Versuchen den Bug zu beheben, oder die vorgefertigte Speicherfunktion zu verwenden.



  • Talla schrieb:

    Foreach ist kein Sprachmittel von C++! Du hast ja sogar selber geschrieben dass es in die Standardlibrary gehört, und Sprache an sich und Klassenbibliothek ist nen himmelweiter Unterschied.

    himmelweit? Der wird ziemlich marginal sein, C++ besteht halt ohne die SC++L (ich genehmige mir mal die Abkürzung) nur aus sehr einfachem Syntax. Und wenn for_each in anderen Sprachen unterstützt wird, dann bedeutet das halt nur, dass die auch größere Funktionen so kennzeichnen, als gehörten sie direkt dazu.
    Ansonsten ist da praktisch überhaupt kein Unterschied, ob das ein Schlüsselwort oder eine Funktion ist, die SC++L gehört schließlich genau so zum C++ Standard.

    Ende der Diskussion

    Ansonsten schieb das einer nach C++-Forum

    MfG Eisflamme



  • Kann hier Mis2Com nur zustimmen.



  • 💡 Nun, ich habe jetzt herausgefunden, dass es eine einfache Möglichkeit gibt, ein komplettes Objekt mit sämtlichen Membern zu speichern.

    Hier der Quelltext dafür http://www.developer.com/net/cplus/article.php/3350931.

    So wie es dort demonstriert wird funktioniert es auch bei mir. Mein Ziel ist es aber, ein Steuerelement der Form also ein Objekt aus System::Windows::Forms zu serialisieren.

    Also habe ich das angegebene Objekt einfach durch das TreeView-Steuerelement ersetzt:

    formatter->Serialize(stream, progammer /*Beispielklasse*/);
    
    formatter->Serialize(stream, treeView1);
    

    Lies sich auch Kompilieren, aber zur Laufzeit kam folgende Fehlermeldung: 😮

    Eine nicht behandelte Ausnahme des Typs 'System.Runtime.Serialization.SerializationException' ist in Screen.exe aufgetreten.

    Zusätzliche Informationen: Der Typ System.Windows.Forms.TreeView in Assembly System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ist nicht als serialisierbar markiert



  • Damit dies funktioniert, muss eine Klasse als Serialiseable markiert werden. Was bei TreeView nicht der Fall ist.



  • Kann man denn diese Markierung nachträglich selbst zu dieser Klasse hinzufügen. Wenn ja - was muss ich dann machen?





  • Danke, ich werde mir das gleich mal ansehen ...



  • Hallo,

    ich habe nun eine Möglichkeit gefunden, den Inhalt eines TreeViews zu speichern. 🙂 😃 🕶

    Hier die Funktionen zum Öfnen und Speichern:

    void SaveTreeViewToDevice(TreeView * tree)
    	{
    		Stream * stream = new FileStream(S"datei.dat", FileMode::Create, FileAccess::ReadWrite); 
    		BinaryFormatter* formatter = new BinaryFormatter(); 
    
    		ArrayList * al = new ArrayList();
    
    		for (int i = 0; i < tree->Nodes->get_Count(); i++)
    		{
    			al->Add(tree->Nodes->Item[i]);
    		}
    
    		formatter->Serialize(stream, al); 
    
    		stream->Close();
    	}
    
    void OpenTreeViewFormDevice(TreeView * tree)
    	{
    		tree->Nodes->Clear();
    
    		Stream * stream = new FileStream(S"datei.dat", FileMode::Open, FileAccess::Read, FileShare::Read);
    
    		BinaryFormatter * formatter = new BinaryFormatter();
    
    		ArrayList * tempAl = static_cast<ArrayList *>(formatter->Deserialize(stream));
    
    		for (int i = 0; i < tempAl->get_Count(); i++)
    		{
    			tree->Nodes->Add(static_cast<TreeNode *>(tempAl->get_Item(i)));
    		}
    
    	}
    


  • Talla schrieb:

    Foreach ist kein Sprachmittel von C++! Du hast ja sogar selber geschrieben dass es in die Standardlibrary gehört, und Sprache an sich und Klassenbibliothek ist nen himmelweiter Unterschied.

    Soweit ich richtig informiert bin, ist die STL inzwischen Bestandteil des C++ Standards.



  • inzwischen
    lol, jo, seit ungefähr 6 Jahren 🤡



  • Und? Die BCL gehört auch zum .Net Framework aber nicht zur Sprache C# an sich. Nur weil die STL zum C++ Standard gehört, heißt es doch nicht automatisch das es zur Sprache an sich gehört.


Anmelden zum Antworten