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 erwartetsendData.PKE=0x2001; sendData.IND=0x0000;// Das ist dieFehlerzeileWarum 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 dieFehlerzeileObiges 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.