Problem mit Zeiger auf Struktur in Klasse (war: hm, ich steh vor einer geschlossenen Tür...)



  • Hoi zäme,

    ich hab' ein seltsames Problem:
    Ich habe eine Struktur definiert:

    typedef struct
              {
              __int16     PKE;
              __int16     IND;
              __int16     PWE2;
              __int16     PWE1;
              __int16     PZD1;
              __int16     PZD2;
              __int16     PZD3;
              __int16     PZD4;
              __int16     PZD5;
              __int16     PZD6;
              }PPO2;
    

    dann lass' ich einen Pointer darauf zeigen:

    PPO2 sendData;
    

    und bei untenstehendem Code meldet bei der entsprechenden Zeile der Compiler folgendes:

    [C++ Fehler] MainForm.cpp(331): E2280 Elementbezeichner erwartet
    
    sendData.PKE=0x2001;
        sendData.IND=0x0000;// Das ist dieFehlerzeile
    

    Warum bloss? seh' ich den Wald vor lauter Bäumen nicht mehr, oder was geht da ab? Warum nur in dieswer Zeile??? 😕 😕
    Danke!

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • typedef struct
    			 {
    			 __int16     PKE;
    			 __int16     IND;
    			 __int16     PWE2;
    			 __int16     PWE1;
    			 __int16     PZD1;
    			 __int16     PZD2;
    			 __int16     PZD3;
    			 __int16     PZD4;
    			 __int16     PZD5;
    			 __int16     PZD6;
    			 }PPO2;
    
     PPO2 sendData;
    
     sendData.PKE=0x2001;
     sendData.IND=0x0000;// Das ist dieFehlerzeile
    

    Obiges lässt sich einwandfrei compilieren. Der Fehler muss wohl woander liegen. Gültigkeitsbereiche beachtet?

    PPO2 sendData ist übrigens kein Zeiger



  • Christian211 schrieb:

    Obiges lässt sich einwandfrei compilieren. Der Fehler muss wohl woander liegen. Gültigkeitsbereiche beachtet?

    PPO2 sendData ist übrigens kein Zeiger

    Korrekt, kein Zeiger, sorry, wollte nichts falsches Vermitteln.
    Ja, der Gültigkeitsbereich sollte kein Problem sein, die Struktur ist ausserhalb einer Klasse deklariert und bei "sendData.PKE=0x2001;" funktionierts ja auch korrekt... 😕



  • Du hast nicht zufällig irgendwo ein #define IND wasweißich? Nenn den Member doch mal anders.



  • MFK schrieb:

    Du hast nicht zufällig irgendwo ein #define IND wasweißich? Nenn den Member doch mal anders.

    nope, ein define gibts nirgends. Hab' den Member schonmal umbenannt, selbes Ergebniss 😞 aaaaaaaaaaaaber ich könnte mir vorstellen, dass es ein Pfad durcheinander gibt...? Ich arbeite überall mit relativen Pfadangaben und Borland plaziert gerne absolute rein. Könnte das ein Problem sein? Ich hab'schon gesucht, aber nichts gefunden und der #include-link ist relativ...



  • Stehen denn die funktionierende und die nicht funktionierende Zeile direkt übereinander, wie in deinem Beispiel, oder in unterschiedlichen Funktion oder in unterschiedlichen Dateien oder was?
    Ist sendData eine globale Variable?
    Liefer doch bitte etwas genauere Informationen.



  • MFK schrieb:

    Stehen denn die funktionierende und die nicht funktionierende Zeile direkt übereinander, wie in deinem Beispiel, oder in unterschiedlichen Funktion oder in unterschiedlichen Dateien oder was?
    Ist sendData eine globale Variable?
    Liefer doch bitte etwas genauere Informationen.

    yup, und yup, direkt untereinander wie im Bsp. und sendData ist eine globale public Variable dieser Klasse.



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • roN schrieb:

    yup, und yup, direkt untereinander wie im Bsp. und sendData ist eine globale public Variable dieser Klasse.

    So etwas gibt es nicht. Entweder global oder public Member.

    Was passiert, wenn du die Zeilen vertauschst?

    Kannst du ein kompilierbares Minimalbeispiel posten, das den Fehler reproduziert?



  • debugge das ding mal mit Codeguard, du verursachst irgendwo eine zugriffsverletzung die sich dann dort bemerkbar macht!



  • MFK schrieb:

    roN schrieb:

    yup, und yup, direkt untereinander wie im Bsp. und sendData ist eine globale public Variable dieser Klasse.

    So etwas gibt es nicht. Entweder global oder public Member.

    Was passiert, wenn du die Zeilen vertauschst?

    Kannst du ein kompilierbares Minimalbeispiel posten, das den Fehler reproduziert?

    - sorry, public
    - Bei Vertausch kommt selber Fehler
    - Der gleiche Code kompiliert ohne gewisse Dateien welche ins Projekt gehören(neu) ich muss jetzt mal sehen Woram das sonst liegen könnte (untewrschiede)....

    Ich versuche das ganze mal ein bisschen Bildlich darzustellen.:

    A: KommunikationsklasseA (#include 😎
    B: KommunikationsklasseB (deklaration der problematischen Struktur)
    C: Verzweigungsklasse (include A&B, erstellt Instanzen von A oder B und "biegt ab")
    😨 Masterklasse welche Daten liefert (#include C)

    neu hinzugekommen ist die Klasse A welche nicht ich erstellt habe...



  • Sunday schrieb:

    debugge das ding mal mit Codeguard, du verursachst irgendwo eine zugriffsverletzung die sich dann dort bemerkbar macht!

    Ich kann ja gar nicht debuggen wenn ich nicht kompilieren kann...



  • Hi hab mal ein Beispiel für eine Struktur, die sicher geht, hab sie aus einem meiner Programme kopiert, ich hoffe das hilft dir weiter:

    [cpp]
    struct Parameter
    {
            char Datum  [10];
            char Zeit   [10];
            char Pumpe  [20];
            char Ventil [20];
            int lux;
            int vorlauf;
            int speicher;
            int ruecklauf;
    };
    struct Parameter stPrmtr;
    

    [/cpp]
    Die Struktur heißt Parametr, weil darin die Parameter für mein Programm enthalten sind, den Zeiger darauf hab ich stPrmtr für "StrukturParameter" genannt.



  • ups. hab ich doch glatt ueberlesen. schon alle temp. dateien geloescht? deklarier die struct doch mal wie in c++ üblich. (struct name { ... };)



  • Sunday schrieb:

    ups. hab ich doch glatt ueberlesen. schon alle temp. dateien geloescht? deklarier die struct doch mal wie in c++ üblich. (struct name { ... };)

    selber Fehler mit:

    struct PPO2
              {
              __int16     PKE;
              __int16     IND;
              __int16     PWE2;
              __int16     PWE1;
              __int16     PZD1;
              __int16     PZD2;
              __int16     PZD3;
              __int16     PZD4;
              __int16     PZD5;
              __int16     PZD6;
              };
    


  • Tom7 schrieb:

    den Zeiger darauf hab ich stPrmtr für "StrukturParameter" genannt.

    das ist kein Zeiger! sondern nur eine variable vom typ StrukturParameter



  • Sunday schrieb:

    Tom7 schrieb:

    den Zeiger darauf hab ich stPrmtr für "StrukturParameter" genannt.

    das ist kein Zeiger! sondern nur eine variable vom typ StrukturParameter

    Sorry hab ich ja gemeint nur eben nicht geschrieben SORRY :p



  • roN schrieb:

    - Bei Vertausch kommt selber Fehler

    Bei IND oder bei PKE?



  • MFK schrieb:

    Bei IND oder bei PKE?

    IND



  • der fehler liegt definitiv wo anders und wird fälschlicherweise dort angezeigt. du solltest nochmal, mittels eines funktionierenden backups vom vortag (gut wenn eines da ist), die gemachten änderungen nachvollziehen, ansonsten halt nochmal alles ueberpruefen.


Anmelden zum Antworten