Brauche Hilfe beim Schreiben einer Forward Declaration



  • Hallo

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      ListBox1->Clear();
      int* zahlenfeld = new int[10];
      zahlenfeld[0] = StrToInt(Form1->Edit1->Text);
      zahlenfeld[1] = StrToInt(Form1->Edit2->Text);
      zahlenfeld[2] = StrToInt(Form1->Edit3->Text);
      zahlenfeld[3] = StrToInt(Form1->Edit4->Text);
      zahlenfeld[4] = StrToInt(Form1->Edit5->Text);
      zahlenfeld[5] = StrToInt(Form1->Edit6->Text);
      zahlenfeld[6] = StrToInt(Form1->Edit7->Text);
      zahlenfeld[7] = StrToInt(Form1->Edit8->Text);
      zahlenfeld[8] = StrToInt(Form1->Edit9->Text);
      zahlenfeld[9] = StrToInt(Form1->Edit10->Text);
    
      eigener_sortieralgorithmus(zahlenfeld,10);//Aufruf der Sortierfunktion
    
      for(int i=0;i<10;++i)
      {
      ListBox1->Items->Add(IntToStr(zahlenfeld [10]));
      }
    }
    
    template <typename y>
    void eigener_sortieralgorithmus(y*& zahlenfeld, const std::size_t& size)
    {
        bool redo = false;
        do {
              redo = false;
                   for (std::size_t i = 0; i < (size - 1); ++i)
       if (zahlenfeld[i] > zahlenfeld[i + 1])
    {
            std::swap<y>(zahlenfeld[i], zahlenfeld[i + 1]);
            redo = true;
            }
            } 
    while (redo == true); 
    }
    

    Da ich noch ein ANFÄNGER bin habe ich leider noch nicht viel Erfahrung und weiß deswegen auch nicht wie ich Forward Declaration, um den Fehler zu beheben, schreiben muss!!

    C++ Fehler:Aufruf der undefinierten Funktion 'eigener_sortieralgorithmus'

    U.A.w.g.



  • template <typename y>
    void eigener_sortieralgorithmus(y*& zahlenfeld, const std::size_t& size);  // das ist die forward-deklaration, weil ohne anweisungsrumpf
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      // [...]
    };  // <-- bin nicht ganz sicher, aber evtl. muss hier auch ein ; hinter
    
    template <typename y>
    void eigener_sortieralgorithmus(y*& zahlenfeld, const std::size_t& size)
    {
       //[...]
    } // <-- siehe oben
    

    btw: ist es wirklich beabsichtigt, dass du eine Referenz auf einen Pointer uebergibst? Scheint mir irgendwie doppelt gemoppelt... Es sei denn, du moechtest mit der Funktion auch den Pointer selber aendern.



  • pumuckl schrieb:

    bin nicht ganz sicher, aber evtl. muss hier auch ein ; hinter

    Ist doch eine ganz normale Funktion das braucht man doch nur am Ende einer Klasse.



  • kaffee schrieb:

    pumuckl schrieb:

    bin nicht ganz sicher, aber evtl. muss hier auch ein ; hinter

    Ist doch eine ganz normale Funktion das braucht man doch nur am Ende einer Klasse.

    k danke... war zwei Jahre abstinent und kann mich an solche Einzelheiten nur erinnern wenn mich der Compiler mit der Nase drauf stoesst - tut er in diesem Fall aber nicht 😉



  • Funtioniert nicht ganz weil ich jetzt zwei neue fehler habe:

    beide bei zeile 33

    1.C++ Fehler:'swap' ist kein Element von'std'
    2.C++ Fehler:Ungültige Verwendung von typedef 'y'



  • wenn du std weglässt?



  • Hast Du <algorithm> includiert?



  • Hallo

    #include <algorithm> hab ich reingeschrieben, dann läuft es, aber die listbox gibt mir jetzt nicht die sortierten zahlen in reihenfolge aus sondern einen zahlenwert also z.B:9069840
    was hat das zu bedeuten????

    U.A.w.g.



  • Oh Mann...

    //ListBox1->Items->Add(IntToStr(zahlenfeld [10])); 
    ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
    

    Und: gewöhn dir diese sinnlosen Referenzen ab! Ein "int*&" (wo eigentlich sonst sein sollte) OMG. "const size_t&" pf. Eieiei...



  • Hallo

    mit ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
    bekomm ich den C++ Fehler: Undefiniertes Symbol 'i'

    U.A.w.g.



  • Hallo

    Was ist ein C++-Fehler?

    chrische



  • ein C++ Fehler ist das was der compiler mir als meldung annzeigt!!!!



  • Aicde schrieb:

    Hallo

    mit ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
    bekomm ich den C++ Fehler: Undefiniertes Symbol 'i'

    U.A.w.g.

    Dann definiere doch i ... soll vermutlich ein int sein, oder ?

    Gruß,

    Simon2.



  • hallo

    nein [i] steht nicht für int sondern für eine variable des zahlenfelde[i] i ist die Größe des zahlenfeldes!!

    U.A.w.g.



  • Hallo

    Ich dachte mir schon wofür c++-fehler steht, aber ich hatte das so noch nicht gehört.

    Das i nicht für int steht ist klar, aber i ist eventuell vom Datentyp int. Wenn es i nicht gibt, musst du es eben in den Quellcode schreiben oder direkt auf die einzelnen Variablen deines Feldes zugreifen.

    chrische



  • Hallo,

    Es war doch diese Zeile hier gemeint.

    for(int i=0;i<10;++i)
      {
      ListBox1->Items->Add(IntToStr(zahlenfeld [10])); //hier kommt statt der 10 das i rein !
      }
    

    da gibt es doch ein i. Es sollte da keinen Fehler geben. Wenn doch, wäre es gut, wenn du uns deinen aktuellen Quelltext nochmal zeigst.



  • Aicde schrieb:

    hallo

    nein [i] steht nicht für int sondern für eine variable des zahlenfelde[i] i ist die Größe des zahlenfeldes!!

    U.A.w.g.

    🙄
    Also ich weiß nicht, ob Du schon reif bist für templates... 😉

    Klar, i ist eine Variable .... und welchen Typ soll die haben ? Und wo teilst Du das dem Compiler mit ? (Letzteres nennt man "Definition von i")

    Gruß,

    Simon2.



  • Hallo

    for(int i=0;i<10;++i)
      {
      ListBox1->Items->Add(IntToStr(zahlenfeld [1])); 
      ListBox1->Items->Add(IntToStr(zahlenfeld [2]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [3]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [4]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [5]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [6]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [7]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [8]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [9]));
      ListBox1->Items->Add(IntToStr(zahlenfeld [10]));
      }
    

    so ist gut man muss ja alle Stellen des Zahlenfeldes ausgeben lassen



  • Hast du das da auch ausprobiert?
    Mal abgesehen davon, dass du über die Arraygrenzen von zahlenfeld hinaus liest (hat 10 Elemente, von 0 bis 9), fügst du hier auch 10mal 10 Zahlen ein.
    reicht das hier nicht?

    for(int i=0;i<10;++i)
    {
      ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
    }
    


  • bei....

    for(int i=0;i<10;++i)
    {
      ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
    }
    

    zeigt der einen Fehler an weil das i undefiniert ist

    oben muss [10] auf [11] geändert werden

    und

    zahlenfeld[0] = 0;

    muss noch dazu gefügt werden dann läufts einwandfrei 🙂



  • i ist hier auf jedem Fall definiert. So wie ich es geschrieben habe muß es funktionieren.
    Hast du nicht zufällig ein Semikolon nach der for-Schleife?
    etwa so?

    for(int i=0;i<10;++i);
    

Anmelden zum Antworten