Deklaration von stl::list als Functionsparameter



  • Hallo zusammen

    folgende Deklaration innerhalb der hpp ergibt leider eine Fehlermeldung innerhalb der Borland IDE beim versuch das Projekt zu compilieren

    void __fastcall updateDaten(TGridView * gv, TMyQuery *q, TMDIChild *handle, std::list<FieldList *> l_FieldList);

    Es scheitert an std::list<FieldList *> l_FieldList

    Schlichte und ganz einfache Frage. Wie muss ich es richtig formulieren, so das der Compiler glücklich ist?

    Vielen Dank für euere Lösung.

    Gruss
    Mirko



  • Hallo,

    Wie lautet denn die Fehlermeldung? Die Deklaration ist ok.



  • Hi

    OK die wäre natürlich hilfreich gewesen, sorry.

    Also ganz ausführlich. Direkt nach dem Aufruf des Compilierens

    kommt ein Popup "Fehler im Modul Unit11 Falsche Methodendeklaration in Klass TFunctionPool"

    Gruss

    Mirko



  • Poste mal ein wenig mehr Quelltext (Header). So kann man nichts erkennen.



  • Kein Problem die hpp

    #ifndef Unit11H
    #define Unit11H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include "CustomGridView.hpp"
    #include "CustomGridViewControl.hpp"
    #include "DBAccess.hpp"
    #include "GridView.hpp"
    #include "MemDS.hpp"
    #include "MyAccess.hpp"
    #include "ScrollView.hpp"
    #include <DB.hpp>
    #include "FieldInfo.h"
    #include "list.h"
    //---------------------------------------------------------------------------
    class TFunktionsPool : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            void __fastcall updateDaten(TGridView * gv, TMyQuery *q, TMDIChild *handle, std::list<FieldList *> l_FieldList);
    //        void __fastcall updateDaten(TGridView * gv, TMyQuery *q, TMDIChild *handle);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TFunktionsPool(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TFunktionsPool *FunktionsPool;
    //---------------------------------------------------------------------------
    #endif
    

    Die Implementation

    void __fastcall TFunktionsPool::updateDaten(TGridView * gv, TMyQuery * q, TMDIChild *handle, std::list<FieldList *> l_FieldList)
    TMDIChild *handle)
    {
    ;
    }

    Gruss

    Mirko



  • Ändere mal

    #include "list.h"
    

    in

    #include <list>
    


  • Hi Braunstein

    OK, das ist schon mal passiert. Aber leider war das nicht der Punkt. Wobei ich natürlich zugebe das Deine Variante die elegantere ist.

    Grundsätzlich klappen ja Listen schon und finden bei mir bereits verwendung. Ergo musste ich diese ja auch schon deklarieren.

    Nur halt die Variante als Funktionsparameter scheinen rumzumaulen. Generell muss das doch aber gehen.

    Gruss

    Mirko



  • Hast Du schon mal versucht die Methodendeklaration von published nach public zu schieben?

    Außerdem hängt bei der Implementierung noch ein

    TMDIChild *handle)
    

    in der Luft. Ist vielleicht
    aber auch nur ein "copy & paste"-Fehler.

    Gruß,

    Alexander



  • Alexander hat recht. Einfach nach public oder privat verschieben.
    Weiterhin solltest du dir überlegen, ob du die vielen includs brauchst. Da du nur Pointer verwendest kannst du ein Teil davon sicher auch durch Forwarddeklarationen ersetzen.



  • Hallo Ihre zwei

    Perfekt, das war des Rätsels Lösung. Unterhalb von public klappt es ohne Probleme.

    Vielen, vielen Dank

    Gruss

    Mirko


Anmelden zum Antworten