Announcement

Collapse
No announcement yet.

TStringList und CustomSort

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TStringList und CustomSort

    <pre>
    In der Klasse TStringList ist die Methode CustomSort enthalten. Bei einem Sortiervorgang werden dieser
    die Liste sowie die nächsten 2 zur Sortierung anstehenden Elemente der Liste übergeben. Die Methode CustomSort
    ruft dann eine Funktion auf, die entscheided, welches der beiden Elemente zuerst kommt.
    <br>
    Folgender Code funktioniert:
    <br>
    //Externe Funktion
    int __fastcall CompareAsString(TStringList* List, int Index1, int Index2);
    <br>
    class TExtendedStringGrid : public TCustomDrawGrid
    {
    private:
    .............
    public:
    void __fastcall Sortieren();
    ....
    }
    <br>
    void __fastcall TExtendedStringGrid::Sortieren()
    {
    TStringList *sortreihe=new TStringList();
    ......
    sortreihe->CustomSort(CompareAsString);
    ........
    }
    <br>
    int __fastcall CompareAsString(TStringList* List, int Index1, int Index2)
    {
    return 0;
    }
    <br>
    Hierbei wurde die Vergleichsfunktion "CompareAsString" außerhalb der Klasse definiert. Ich hätte aber gerne die
    Vergleichsfunktion als Methode der Klasse, um Zgriff auf Elemente der Klasse zu haben.
    <br>
    Folgender Code geht nicht:
    <br>
    class TExtendedStringGrid : public TCustomDrawGrid
    {
    private:
    int __fastcall CompareAsString(TStringList* List, int Index1, int Index2);
    ............
    public:
    void __fastcall Sortieren();
    ....
    }
    <br>
    void __fastcall TExtendedStringGrid::Sortieren()
    {
    TStringList *sortreihe=new TStringList();
    ......
    sortreihe->CustomSort(CompareAsString);
    ........
    }
    <br>
    int __fastcall TExtendedStringGrid::CompareAsString(TStringList* List, int Index1, int Index2)
    {
    return 0;
    }
    <br>
    Die Fehlermeldung lautet:
    <br>
    [C++ Fehler] ExtendedStringGrid.cpp(1670): E2034 Konvertierung von 'int (_fastcall * (_closure )(TStringList *,int,int))(TStringList *,int,int)' nach 'int (_fastcall *)(TStringList *,int,int)' nicht möglich
    <br>
    Hat jemand einen Hinweis, wie ich die Funktion in meine Klasse reinkriege??

    </pre>
    Christian

  • #2
    The hedear function is not needed, your function should not be part of your class. Just delete the header bellow and your customSort should work now.

    //Externe Funktion
    int __fastcall CompareAsString(TStringList* List, int Index1, int Index2);

    than the part:
    int __fastcall TExtendedStringGrid::CompareAsString(TStringList* List, int Index1, int Index2)

    should look like
    int __fastcall CompareAsString(TStringList* List, int Index1, int Index2)
    {...}

    Comment


    • #3
      Auch wenn die Frage aus 2002 ist -> Danke, Manchmal sieht man den Wald vor lauter Bäumen nicht
      Christian

      Comment

      Working...
      X