Klasse initialisieren



  • Hi
    Ich habe ein Problem und zwar beschäftige ich mich mit einer HTTP Klasse und wollte die Benötigten Daten über ein C-struct meiner HTTP Klasse übergeben. Da ich im Internet nicht finden konnte wie man nun den Typ initialisiert bevor man eine Variable anfordert dachte ich mir mache ich einfach eine Klasse draus, da ich meinte zu wissen wo der Fehler liegt. Das klappt aber komischerweise nicht:

    class HTTP_GET_REQUEST
    {
        public:
        HTTP_GET_REQUEST::HTTP_GET_REQUEST()
        :HTTP_VERSION(HTTP_1_1),URL(""),Accept(""),AcceptLang(""),AcceptEncoding(""), AcceptCharSet(""),Connection(HTTP_CLOSE),Cookie(""),isbuffer(false), SavePath("")
        {
        }
        //Variable
        bool HTTP_VERSION;
        std::string URL;
        std::string UserAgent;
        std::string Accept;
        std::string AcceptLang;
        std::string AcceptEncoding;
        std::string AcceptCharSet;
        bool Connection;
        std::string Cookie;
        //Hier muss noch eine Klasse für Cookies implementiert werden
        bool isbuffer;
        std::string SavePath;
        //Constructer
    
    };
    

    Der Fehler:

    C:\Dokumente und Einstellungen\Vincent\Eigene Dateien\C++ Projekte\HTTP CLass\HTTP.hpp||In constructor `HTTP_GET_REQUEST::HTTP_GET_REQUEST()':|
    C:\Dokumente und Einstellungen\Vincent\Eigene Dateien\C++ Projekte\HTTP CLass\HTTP.hpp|31|error: expected primary-expression before '=' token|
    

    Falls jemand mir helfen könnte wäre ich sehr dankbar

    MfG cobra11freak



  • Lass die unnötige Initialisierungen der std::string. Die sind von Haus aus mit NOTHING initialisiert.



  • Ist 'HTTP_1_1' was anderes als true oder false?
    Ansonsten ist nämlich kein '='-Token bei dir zu sehen.



  • Vielen Dank für die Antwort

    Ich habe den Code jetzt geändert leider tritt immer noch derselbe Fehler auf:

    class HTTP_GET_REQUEST
    {
        public:
        HTTP_GET_REQUEST::HTTP_GET_REQUEST()
        :HTTP_VERSION(HTTP_1_1),Connection(HTTP_CLOSE),isbuffer(false),
        {
        }
        //Variable
        bool HTTP_VERSION;
        std::string URL;
        std::string UserAgent;
        std::string Accept;
        std::string AcceptLang;
        std::string AcceptEncoding;
        std::string AcceptCharSet;
        bool Connection;
        std::string Cookie;
        //Hier muss noch eine Klasse für Cookies implementiert werden
        bool isbuffer;
        std::string SavePath;
        //Constructer
    
    };
    


  • Hi
    Das sind die Definitionen:

    #define HTTP_1_1 = true
    #define HTTP_1_0 = false
    #define HTTP_KEEP_ALIVE = true
    #define HTTP_CLOSE = false
    

    MfG cobra11freak



  • #define HTTP_1_1 true
    #define HTTP_1_0 false
    #define HTTP_KEEP_ALIVE true
    #define HTTP_CLOSE false
    

    Ohne '='



  • Hi
    Vielen Dank blubber31 für die Antwort!
    Man benutzt ja Definitionen recht selten und da vergisst man schnell die Syntax.
    Jetzt geht es jedenfalls...

    MfG cobra11freak



  • Immer behilflich 🙂



  • In C++ benutzt man dafür aber Konstanten, d.h.

    const bool HTTP_1_1 = true;
    

    Nun darfst du auch wieder die Gleichheitszeichen benutzen -)



  • Ja danke. Kann ich ja auch benutzen habe ich ja sonst auch immer.
    Kann mir einer von euch vielleicht noch schreiben ob/wie man struct arrays initialisiert bevor man eine variable erzeugt?

    MfG cobra11freak



  • struct something
    {
        int data ;
    };
    
    something array[1024] = { 0 } ;
    


  • Danke erstmal,
    Nur wie kann ich das schon Standartmäßig initialisieren, wie beim Konstrukter?
    Ich habe da nichts bei google gefunden, nur das was du hier demonstrierst.



  • Ach es gibt ja auch Konstruktore in structs:

    struct something
    {
        something() : data(0) { }
        int data ;
    };
    
    something array[1024] ;
    

    Meine 1. Variante war auch standardmäßig.



  • Wie wärs wenn du den Konstruktor einfach nutzt?

    struct Struktur
    {
        Struktur() : data(5) { }
        int data;
    };
    
    int main()
    {
        Struktur s[10];
    }
    


  • tss

    struct ist gleich class nur das struct default public ist und class private(?). und ein array mit struct besser mit vector und dann bush_back usw.



  • 34tz43hz54h schrieb:

    tss

    struct ist gleich class nur das struct default public ist und class private(?). und ein array mit struct besser mit vector und dann bush_back usw.

    Aha.



  • 34tz43hz54h schrieb:

    tss

    struct ist gleich class nur das struct default public ist und class private(?). und ein array mit struct besser mit vector und dann bush_back usw.

    Genau, die Objekte kannst du dann mit bush_back da reinhauen...



  • Brivate Baula benutzt auch bush_back :p

    Mal was anderes:
    Was machst du, wenn irgendwann ein neuer HTTP Standard veröffentlich wird? Die Identifikation der HTTP Protokollversion über einen bool halte ich für nicht sinnvoll, was spricht da gegen einen Aufzählungstypen oder eine Konstante?



  • *snief* ja ja .. pasht mich nur alle *g*
    nebenbei sollte meine antwort nur ergänzend zu den anderen sein.



  • In der 4 Zeile passt der Syntax nicht. Es ist ein HTTP_GET_REQUEST zuviel. Die Auszeichnung mit dem Klassennamen brauchst du nur in der Implementierungsdatei. Ich weiß nicht ob der Fehler nur beim kopieren ins Forum entstanden ist und habe auch nicht ausprobiert ob damit deine Compilermeldungen entstehen.

    falsch:

    HTTP_GET_REQUEST::HTTP_GET_REQUEST()
    

    richtig:

    HTTP_GET_REQUEST()
    

    P.S: Ich finde UPPERCASE Bezeichner sehr verwirrend. Da diese in den meisten Codings Styleguides für Makros reserviert sind.



  • DocShoe schrieb:

    Brivate Baula benutzt auch bush_back :p

    Mal was anderes:
    Was machst du, wenn irgendwann ein neuer HTTP Standard veröffentlich wird? Die Identifikation der HTTP Protokollversion über einen bool halte ich für nicht sinnvoll, was spricht da gegen einen Aufzählungstypen oder eine Konstante?

    Guter Hinweis eigentlich, aber da in 20 Jahren erst 2 Versionen rausgekommen sind, habe ich daran gezweifelt, dass eine 3. HTTP Version rauskommt. Aber du hast völlig Recht es könnte ja doch noch eine rauskommen. Ich denke ich werde das ändern.


Anmelden zum Antworten