struct-Mitglieder werden nicht erkannt



  • guten abend, ich hoffe, daß richtige Forum erwischt zu haben:

    wenn ich (unter linux) die Datei einzelbefund.cc mit make erstellen möchte kommt diese Fehlermeldung
    *einzelbefund.cc:145: `class vector<NormalWert,allocator<NormalWert> >' has no member named `normalWert'
    *

    Auszug aus einzelbefund.cc

    struct NormalWert {
            string male  ;
            string alterInTagen;
            string validFrom ;
            string normalWert;
    };
    
    vector<NormalWert> normalWertListe;
    //.. mehr code...
                            if(  ! suchDatum.empty() && ( suchDatum == normale.getString("VALID_FROM") )) {
                                    normalWertListe.resize ( ++anzahl);
                                    normalWertListe[anzahl].male            =  normale.getString("MALE");
                                    normalWertListe[anzahl].alterInTagen    =  normale.getString("ALTER_TAGE");
                                    normalWertListe[anzahl].validFrom       =  normale.getString("VALID_FROM");
                                    normalWertListe[anzahl].normalWert      =  normale.getString("NORMALWERT");
                            }
    

    Sieht jemand meinen Fehler?
    Danke Hanns



  • Hi,

    solche Fehler hatte ich auch schonmal (allerdings unter Windows).
    Fehler finde ich in deinem Code keine.

    Bei mir hat es oft daran gelegen, dass irgendwo im Code ueber der betreffenden
    Zeile ein Semikolon gefehlt hat.

    Ansonsten kann ich dir auch nicht weiterhelfen, sorry 😞

    Schau dir einfach nochmal den Code darueber an

    mfg
    v R



  • DA mein Quelltext recht groß ist..
    Könnte es sein, daß der Compiler die Fühler streckt, und das irgendwie nicht mitrbekommt ?

    Ich hab auch schon versucht, die Reiehenfolge in der Struktur zu ändern. Der gleiche Fehler ??
    Hanns



  • Hi,

    wenn ich nich recht erinnere liegt der Fehler hier:

    Du schreibst:

    struct NormalWert { 
            string male  ; 
            string alterInTagen; 
            string validFrom ; 
            string normalWert; 
    
    }; // Keine Member deklariert
    

    Verdsuche es doch einmal so:

    typedef struct tag_NormalWert { 
            string male  ; 
            string alterInTagen; 
            string validFrom ; 
            string normalWert; 
    
    } NormalWert;
    

    und so bekommst du ein Member des Structs

    NormalWert VarNormalWert; // Member des structs
    

    MFG
    Kai

    EDIT: Kleinen Fehler vom Amt beseitigt



  • und so bekommst du ein Member des Structs
    NormalWert VarNormalWert;

    Ahja, nennt man das neuerdings schon 'Member' ?



  • @ Unregistrierter

    Ok es ist kein Member es ist 'nur' eine Variable.

    Ich hoffe es fühlt sich jetzt keine mehr auf den Schlips getreten. 🙄

    MFG
    Kai



  • ignoriere kaies post. voelliger unsinn.



  • @ PeterTheMaster
    Was ist daran unsinn? Ich hoffe du erklärst es, so das ich auch was aus meinen Fehlern lernen kann.

    MFG
    Kai



  • als variablen bezeichnet man informationbeinhaltende konstrukte ausserhalb von klassen.
    innerhalb von klassen nennt man solche konstrukte dann attribute.



  • Die Fehlermeldung sagt, daß "class vector<NormalWert,allocator<NormalWert> >" kein Member "normalWert" hat, *nicht* daß dieser Member bei der Struct NormalWert fehlt. Im geposteten Code scheint mir alles richtig zu sein, aber könntest du irgendwo statt "normalWertListe[anzahl].normalWert" nur "normalWertListe.normalWert" geschrieben haben?

    @KaiE:
    In C++ kann man ein Struct wie eine Klasse deklarieren. Deshalb ist Hanns Deklaration völlig OK. Dein Beispiel mit typedef ist C und deshalb veraltet.

    Stefan (ehemals StefanD).



  • Nun wird es ja immer schlimmer. ich habe KAiE Rat befolgt:

    struct tag_NormalWert {
            string male  ;
            string alterInTagen;
            string normalWert;
            string validFrom ;
    }NormalWert;
    
    vector<NormalWert> normalWertListe;// Zeile 44
    

    ergibt diesen Fehler

    g++ -c -Wall einzelbefund.cc
    einzelbefund.cc:44: type/value mismatch at argument 1 in template parameter list for template <class \_Tp, class \_Alloc = class allocator<\_Tp1> > vector<\_Tp,_Alloc>' einzelbefund.cc:44: expected a type, gotNormalWert'
    einzelbefund.cc:44: template argument 1 is invalid
    einzelbefund.cc:44: template argument 2 is invalid
    einzelbefund.cc:44: ANSI C++ forbids declaration `normalWertListe' with no type



  • ^Hanns schrieb:

    Nun wird es ja immer schlimmer. ich habe KAiE Rat befolgt:

    struct tag_NormalWert {
    
    1. Wurde dir geraten, KaiE's Rat nicht zu befolgen
    2. Hast du ihn nicht befolgt, lies mal genauer.

    Was soll das eigentlich?



  • Stimmt Bashar, ich müsste lesen können. ( es hat eh nicht geklappt )

    Was es soll?

    ich möchte zusammenhängende Information in einem Vector speichern. Dazu habe ich die Infos in einer struct erklärt, und dann einen vector erklärt.
    Dieses geschieht in labor_utils.hh ( war bei der serten Anfrage anders: direkt im quellcode ).
    labor_utils.hh lautet:

    #ifndef ISNORMAL
    #define ISNORMAL
    int isNormal ( string cGemessen,string cNormaltext  );
    int AlterInTagen ( string datum_Alt, string datum_Neu ) ;
    
    struct normWert {
            string male  ;
            string alterInTagen;
            string normalWert;
            string validFrom ;
    };
    
    vector<normWert> normalWertListe;
    #endif
    

    mein Hauptprorgamm

    //....
    #include "labor_utils.hh"    //zeile 32
    //...
            if ( normalWertListe.size()   == 1 ) return ( normalWertListe.normalWert);   // zeile 136
    

    ergibt jetzt den Fehler:

    g++ -c -Wall einzelbefund.cc
    einzelbefund.cc: In function `class string getNormalWert(basic_string<char,string_char_traits<char>,__default_alloc_template<true,0> >, basic_string<char,string_char_traits<char>,__default_alloc_template<true,0> >, basic_string<char,string_char_traits<char>,__default_alloc_template<true,0> >, int)':
    einzelbefund.cc:136: `class vector<normWert,allocator<normWert> >' has no member named `normalWert'
    

    ich habe zwei weitere structs mit vector benutzt, un dort klappt es.
    Nachdem ich diese strucht eingabut habe, kommt die Fehlermeldung.
    Und ich sehe beim besten wiullen nicht, woran es liegen könnte

    Hanns



  • ^Hanns schrieb:

    if ( normalWertListe.size()   == 1 ) return ( normalWertListe.normalWert);   // zeile 136
    

    Ha! Da haben wir's doch: 'normalWertListe.normalWert'. Du versuchst, den Vektor als Struct zu behandeln. Das klappt natürlich nicht. Da size() an der Stelle gleich 1 sein soll, mußt du wohl 'normalWertListe[0].normalWert' meinen.



  • 2 vorschläge :

    #ifndef ISNORMAL 
    #define ISNORMAL 
    int isNormal ( string cGemessen,string cNormaltext  ); 
    int AlterInTagen ( string datum_Alt, string datum_Neu ) ;
    struct normWert {
             string male  ;
             string alterInTagen;
             string normalWert;
             string validFrom ;
     };
    
    vector<struct normWert> normalWertListe; 
    #endif
    
    #ifndef ISNORMAL 
    #define ISNORMAL 
    int isNormal ( string cGemessen,string cNormaltext  ); 
    int AlterInTagen ( string datum_Alt, string datum_Neu ) ;
    typedef struct normWert {
             string male  ;
             string alterInTagen;
             string normalWert;
             string validFrom ;
     }NormWert;
    
    vector<NormWert> normalWertListe; 
    #endif
    


  • DStefan schrieb:

    .., aber könntest du irgendwo statt "normalWertListe[anzahl].normalWert" nur "normalWertListe.normalWert" geschrieben haben?

    Stefan (ehemals StefanD).

    Ich war blind 😃 Das wars
    danke Stefan

    Hanns


Anmelden zum Antworten