Probleme mit unsigned char vektor



  • Hallo zusammen 🙂

    Ich hab ein Problem mit einem Vektor, genauer gesagt mit einem unsigned char Vektor... Ich habe hier gesehen, dass ich einen Vektor folgendermaßen erstellen kann:

    vector<unsigned char> tokens(2, 0);
    

    Wenn ich das jedoch tue, bekomme ich folgende Fehlermeldung:

    Fehler: expected identifier before numeric constant
    Fehler: expected ',' or '...' before numeric constant
    

    Lasse ich das "(2, 0)" weg geht es und ich kann auch via "push_back()" Werte hinzufügen, aber ich frage mich, warum ich den Vektor nicht wie im Tutorial angegeben erstellen kann... Das geht übrigens auch mit einem zB int-Vektor nicht.

    Dann hätte ich gleich noch eine zweite Frage... Und zwar würde ich gern wissen, wie ich Werte aus diesem unsigned char Vektor vergleichen kann. Versuche ich es auf die "konventionelle" Art

    if (tokens[0] == "7")
    

    oder

    if (tokens.at(0) == "7")
    

    bekomme ich immer den Fehler

    Fehler: ISO-C++ verbietet Vergleich zwischen Zeiger und Ganzzahl
    

    In meinem jugendlichen Leichtzinn vermute ich mal, dass der Vektor auf den Speicherplatz zeigt, an dem mein unsigned char Wert liegt, aber wie kann ich dann diesen Wert vergleichen? Also mit welcher Schreibweise? 😕

    Wäre super, wenn mir jemand helfen könnte 🙂

    Liebe Grüße,
    Molly



  • Molly_Grue schrieb:

    Hallo zusammen 🙂

    Ich hab ein Problem mit einem Vektor, genauer gesagt mit einem unsigned char Vektor... Ich habe hier gesehen, dass ich einen Vektor folgendermaßen erstellen kann:

    vector<unsigned char> tokens(2, 0);
    

    Wenn ich das jedoch tue, bekomme ich folgende Fehlermeldung:

    Fehler: expected identifier before numeric constant
    Fehler: expected ',' or '...' before numeric constant
    

    In der Zeile kann ich keinen Fehler entdecken, also ist der womöglich etwas weiter oben im Quelltext.

    Dann hätte ich gleich noch eine zweite Frage... Und zwar würde ich gern wissen, wie ich Werte aus diesem unsigned char Vektor vergleichen kann. Versuche ich es auf die "konventionelle" Art

    if (tokens[0] == "7")
    

    oder

    if (tokens.at(0) == "7")
    

    bekomme ich immer den Fehler

    Fehler: ISO-C++ verbietet Vergleich zwischen Zeiger und Ganzzahl
    

    In meinem jugendlichen Leichtzinn vermute ich mal, dass der Vektor auf den Speicherplatz zeigt, an dem mein unsigned char Wert liegt, aber wie kann ich dann diesen Wert vergleichen? Also mit welcher Schreibweise? 😕

    char-Literale schreibt man mit einfachen Anführungszeichen:

    if(tokens[0]=='7')
    


  • Autsch... Auf das mit den einfachen Anführungszeichen hätte ich selbst kommen können. Danke, das war der Fehler 🙂

    Meine Datei sieht so aus:

    #ifndef DBTASKHANDLER_H
    #define DBTASKHANDLER_H
    
    #include "ElisaServiceSoccer.h"
    
    using namespace std;
    using namespace ElisaService;
    
    class DBTaskHandler {
    
       private:
          struct telegramm {
             vector<unsigned char> tokens;
             int wert;
             string ausgangslinie;
             string source;
           } ToSlave;
    
       public:
          DBTaskHandler();
    
          int setTelegramm(string);
          struct telegramm getTelegramm(string);
    
    };
    
    #endif
    

    Also eigentlich eine kleine, unauffällige header-Datei...



  • Und an welcher Stelle steht der obige Ctor-Aufruf?



  • ich koennt mir vorstellen dass du innerhalb der Struct-deklaration den vector nicht initialisieren kannst... Das sollte (glaube ich) in die Initialisierungsliste der Struct, wenn gleich cih nicht genau weiss, wie das syntaktisch fuer den vector zu loesen waere.



  • CStoll schrieb:

    Und an welcher Stelle steht der obige Ctor-Aufruf?

    Zeile 14, im Stuct. Ich hab ihn hier allerdings schon abgeändert (also ohne "(2, 0)"), ist mir bei copy&paste nicht aufgefallen, sorry 😕



  • Wie Pumuckl richtig erkannt hat, kannst du in der struct-Deklaration die Member noch nicht initialisieren. Dafür mußt du den Konstruktor verwenden:

    class DBTaskHandler
    {
      private:
        struct telegramm
        {
          vector<unsigned char> tokens;
          int wert;
          string ausgangslinie;
          string source;
          //Konstruktor:
          telegramm()
          : tokens(2,0) {}
        } ToSlave;
    };
    


  • Okay, vielen Dank für eure schnelle Hilfe 🙂 Hätte ich mir das googlen seit heut Morgen sparen können 😉



  • Keiner hat was zu "useing namespace" in Headern zu sagen?



  • Helium schrieb:

    Keiner hat was zu "useing namespace" in Headern zu sagen?

    Ich will auch nichts darüber wissen, mein Programm funktioniert jetzt 🙂



  • Molly_Grue schrieb:

    Helium schrieb:

    Keiner hat was zu "useing namespace" in Headern zu sagen?

    Ich will auch nichts darüber wissen, mein Programm funktioniert jetzt 🙂

    👎 👎 👎



  • Helium schrieb:

    Molly_Grue schrieb:

    Helium schrieb:

    Keiner hat was zu "useing namespace" in Headern zu sagen?

    Ich will auch nichts darüber wissen, mein Programm funktioniert jetzt 🙂

    👎 👎 👎

    🤡



  • Der Beitrag ist zwar alt, aber ich bin eben nochmal drüber gestolpert weil ich den Link noch in den Lesezeichen hatte...

    Wenn die letzten zwei Posts unter dem Namen "Molly_Grue" ein Wink mit dem Zaunpfahl sein sollen, dass man sich erst Registrieren und dann posten soll, hätte man das auch anders regeln können und nicht indem man den unregistrierten Nick von jemanden so in den Dreck zieht! 👎 Das ist ja echt panne...

    Die letzten zwei Posts als "Molly_Grue" stammen auf jeden Fall nicht von mir...



  • Verstehen sie Spaß?


Anmelden zum Antworten