Schleife mit Dynamische Variablen bitte helfen!!!



  • Hallo,
    wie ist es möglich den Wert pageadresse in dieser Schleife bei jedem Schleifen durchlauf in eine andere Variable zu speichern.Die Variable sollte wenn möglich dynamisch sein.

    void CPADViewerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
    {

    int CurSel = m_liste.GetSelectionMark(); // Spart die Schleife

    if (CurSel != -1) // Ist was gewählt?
    {
    //text des Selektierten Item holen und anzeigen
    for (int r=0;r<m_nSpaltenzahl;r++)
    {
    CString pageadress;
    pageadress = m_liste.GetItemText(CurSel,r);
    for (int e=0;e<1;e++)
    {
    // pageadress = m_liste.GetItemText(CurSel,r); //<-- Achtung, Index geändert

    MessageBox(pageadress);
    }
    //Anzeigen dlg;

    //dlg.breite = pageadress;

    //dlg.DoModal();

    }

    }



  • z.B. mit CStringArray oder std::vectorstd::string.



  • hi, bin anfänger hast du ein Beispiel für mein Problem bitte mit Beschreibung



  • Schau doch in der MFC-Hilfe unter CStringArray.

    Wenn Du Programmierer werden willst, kannst Du Dich schonmal daran gewoehnen, in der MFC Doku oder der Windows Platform API Doku zu lesen. Das schadet nix! 😉



  • leider habe ich die msdn hilfe nicht



  • Hier ist ein Beispiel mit einem std::vector:

    #include <vector>
    #include <string>
    
    vector<string>  myStringVec;
    
    void addString( const string& str ) {
       myStringVec.push_back( str );
    }
    
    void test( void ) {
       for ( int i=0; i < 10; ++i ) {
          addString( "hallo" );
       }
    }
    


  • kannst du mir das etwas erklären?
    oder sogar in meinem Quelltext einbauen?



  • bumbumb1 schrieb:

    leider habe ich die msdn hilfe nicht

    Wenn Du Visual C++ benutzt, hast Du beides, die MFC Hilfe und die Platform API Dokumentation. (notfalls nachinstallieren)

    Du kannst die Platform API Dokumentation auch kostenlos bei Microsoft herunterladen ( http://msdn.microsoft.com/library und dann unter Platform SDK, Downloads gucken ).



  • einbauen kannst du es mir im obrigen Quelltext nicht? Wärst mir echt eine Hilfe



  • bumbumb1 schrieb:

    kannst du mir das etwas erklären?

    Die Funktion "addString()" fuegt den als Parameter uebergebenen String in das Array "myStringVec" ein, das als globale Variable deklariert wurde. Dabei wird "push_back()" benutzt, um den String ans Ende des Arrays / Vektors zu schreiben. Dabei wird das Array automatisch vergroessert.

    Geh doch mal ins C++ Forum, und schreib erstmal ein paar "normale" C++ Programme ohne MFC.



  • bitte bau mir es doch ein



  • CStringArray myArray;
    
    void CPADViewerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
    {
       int CurSel = m_liste.GetSelectionMark(); // Spart die Schleife
       if (CurSel != -1) // Ist was gewählt?
       {
          //text des Selektierten Item holen und anzeigen
          for (int r=0;r<m_nSpaltenzahl;r++)
          {
             CString pageadress;
             pageadress = m_liste.GetItemText(CurSel,r);
             myArray.addString( pageaddress );
             for (int e=0;e<1;e++)
             {
                // pageadress = m_liste.GetItemText(CurSel,r); //<-- Achtung, Index geändert
                MessageBox(pageadress);
             }
             //Anzeigen dlg;
             //dlg.breite = pageadress;
             //dlg.DoModal();
          }
       }
    }
    


  • er laüft auf einige Fehler add String ist kein element von CStringarry



  • bumbumb1 schrieb:

    er laüft auf einige Fehler add String ist kein element von CStringarry

    Probier mal "add()". Bin leider grade zu Hause und hab kein Windows zur Hand (benutze Linux). (oder append(), appendString(), meistens so irgendwas)



  • muss ich oben noch was im header includen? Der fehler ist immer noch



  • bumbumb1 schrieb:

    muss ich oben noch was im header includen? Der fehler ist immer noch

    Na ja, wenn er sagt, "ist kein Element von CStringArray", dann kennt er CStringArray ja.

    Du musst nur nachgucken, wie die Methode zum Einfuegen von Strings in das Array heisst. Probier mal append() oder appendString().



  • ne das geht auch nicht



  • Kann auch sein, dass Du den Anfangsbuchstaben gross schreiben musst, also z.B. "AddString()" statt "addString()" oder "Append()" statt "append()".

    Hier noch eine andere Version mit der STL:

    #include <string>
    #include <vector>
    
    typedef std::string           String;
    typedef std::vector<String>   StringVec;
    
    StringVec myArray;
    
    void CPADViewerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
    {
       int CurSel = m_liste.GetSelectionMark(); // Spart die Schleife
       if (CurSel != -1) // Ist was gewählt?
       {
          //text des Selektierten Item holen und anzeigen
          for (int r=0;r<m_nSpaltenzahl;r++)
          {
             CString pageadress;
             pageadress = m_liste.GetItemText(CurSel,r);
             myArray.push_back( String( pageaddress.GetBuffer() ) );
             for (int e=0;e<1;e++)
             {
                // pageadress = m_liste.GetItemText(CurSel,r); //<-- Achtung, Index geändert
                MessageBox(pageadress);
             }
             //Anzeigen dlg;
             //dlg.breite = pageadress;
             //dlg.DoModal();
          }
       }
    }
    


  • schon besser aber er sagt halt error C2660: 'GetBuffer' : Funktion akzeptiert keine 0 Parameter



  • bumbumb1 schrieb:

    schon besser aber er sagt halt error C2660: 'GetBuffer' : Funktion akzeptiert keine 0 Parameter

    Aha, da sind wir ja schonmal weiter! 😉

    Sorry, aber meine MFC Kenntnisse sind nicht so toll -- ich guck immer in die Doku und vergess es dann wieder! 😉

    Lass mal ".GetBuffer()" weg, ich glaube CString hat einen "operator const char*()".


Anmelden zum Antworten