Forum: Compiler & IDEs Fehler in Strukturdeklaration?


von guest111 (Gast)


Lesenswert?

Hallo,

ich programmiere gerade eine Struktur im CodeVisionAVR.
Dazu habe ich im Header-File x.h die Struktur deklariert:
1
struct name_struct
2
{
3
int var1;
4
int var2;
5
int var 3;
6
};
7
extern flash struct name_struct objekt_struct[];

im Code-File wird den Variablen dann ein Wert zugeordnet:
1
Z1: flash struct name_struct objekt_struct[]=
2
Z2: {
3
Z3: {1, 2, 3},
4
Z4: {4, 5, 6},
5
Z5: {7, 8, 9}
6
Z6: };
Kann mir bitte einer logisch erklären, warum im CodeVision das folgende 
Problem für Zeile1 kommt:
"storage modifier not allowed in this context" ???


Danke im Voraus!

: Verschoben durch User
von Bitflüsterer (Gast)


Lesenswert?

Sicher kann das jemand. Aber wozu hier die zehnttausendste Erklärung 
dazu abgegeben? Such einfach im Internet.

von HerbertLint (Gast)


Lesenswert?

guest111 schrieb:
> int var 3;

Entferne das Leerzeichen zwischen var und 3.

von guest111 (Gast)


Lesenswert?

Also das Leerzeichen war nicht das Problem, das hatte ich nur falsch 
angegeben.

Bitflüsterer schrieb:
>Such einfach im Internet.

Danke für den hilfreichen Tip. Ich hatte nur schon überall gesucht und 
leider nix in der Richtung gefunden...sonst hätte ich hier keine unnütze 
Frage gestellt.

Eventuell kann mir jemand eine Lösung näherbringen?


Mit freundlichen Grüßen.:
guest111

von Karl H. (kbuchegg)


Lesenswert?

Na ja.
Wenn der Compiler sich beschwert

"storage modifier not allowed in this context" ???

dann ist eben der storage modifier hier nicht erlaubt.

Was ist ein storage modifier? Offenbar spicht der Compiler vom 
Schlüsselwort 'flash'. Das ist das einzige, was ich hier als storage 
modifier ansehen würde.
Warum das so ist, das wirst du die Leute von CodeVision fragen müssen, 
bzw. in deren Doku stöbern, ob sie dort einen Hinweis geben, was sonst 
alles schief gehen würde.

(Persönlich erscheint mir das auch unlogisch. Wenn schon, dann hätte ich 
eher erwartet, dass die beiden - Deklaration und Definition, auf Biegen 
und Brechen übereinstimmen müssen.

Aber vielleicht ist die Fehlermeldung ja auch fehlerhaft und das 
eigentliche Problem sitzt ganz woanders. Das ist halt immer die Krux, 
wenn man keinen kompletten Source Code zur Verfügung hat. So manch 
vergessener Semikolon hat schon zu den tollsten Fehlermeldungen geführt, 
je nachdem wo er vergessen wurde. Und das solle man auch immer im 
Hinterkopf behalten, wenn man ein Codeschnipselchen beurteilen soll.

: Bearbeitet durch User
von test (Gast)


Lesenswert?

Hi,

ich kenne weder den Compiler noch hab ich dein Beispiel getestet.
Nach der Fehlermeldung würde ich aber folgendes vermuten:

1. Mach das "flash" in der Deklaration (Header) weg. WO das im Endeffekt 
liegt, wird bei der Deklaration noch nicht interessieren.
2. Da der Kram ja im Flash liegt, musst du das wahrscheinlich als const 
deklarieren.

von Stefan E. (sternst)


Lesenswert?

guest111 schrieb:
> Also das Leerzeichen war nicht das Problem, das hatte ich nur falsch
> angegeben.

Du hast den Code also hier eingetippt, anstatt Copy&Paste zu benutzen? 
Tu das nicht wieder, das ist eine ziemlich dumme Idee.

guest111 schrieb:
> "storage modifier not allowed in this context"

Wenn die Fehlermeldung den Terminus "in this context" enthält, meinst du 
dann nicht, es könnte für die Fehlersuche vielleicht sinnvoll sein, wenn 
wir diesen Kontext kennen würden?

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

test schrieb:
> 1. Mach das "flash" in der Deklaration (Header) weg. WO das im Endeffekt
> liegt, wird bei der Deklaration noch nicht interessieren.

Natürlich interessiert das auch bei der Deklaration. Bei der Verwendung 
der Variable muss ja entsprechender Code erzeugt werden.

von guest111 (Gast)


Lesenswert?

Vielen Dank für die zahlreichen und hilfreichen Kommentare!

Richtig erkannt: ich habe das einzeln hier eingegeben, weil der 
Quellcode unter Verschluss gehalten werden muss. (war ja nur "var3" 
falsch)

Es gab zwei Probleme:

1. Der Compile wollte tatsächlich die Speicherzuweisung im *.c-File 
nicht sehen.

2. Der Speicherbereich Flash war auch für meine Anwendung völlig falsch 
- es hätte der EEPROM sein müssen. Das dürfte allerdings nichts mehr der 
beschriebenen Fehlermeldung zutun gehabt haben.

Ansonsten lies sich die Sache so umsetzen und die Variablen lassen sich 
auch während der Laufzeit ändern.


Mit freundlichen Grüßen.:
guest111

von Rolf Magnus (Gast)


Lesenswert?

guest111 schrieb:
> Vielen Dank für die zahlreichen und hilfreichen Kommentare!
>
> Richtig erkannt: ich habe das einzeln hier eingegeben, weil der
> Quellcode unter Verschluss gehalten werden muss. (war ja nur "var3"
> falsch)

Dann schreib halt ein neues Minimalprogramm, das dein Compiler mit der 
gleichen Meldung quittiert und poste dann das. Code zu posten, der 
ausschließlich für das Posting geschrieben ist und nie einen Compiler 
gesehen hat, ist Blödsinn. Dieser Code enthält nicht selten statt des 
beanstandeten Fehlers einen anderen, und du verschwendest dann nur die 
Zeit der Helfer mit diesen Fehlern, die "im eigentlichen Code" gar nicht 
drin sind.

von guest111 (Gast)


Lesenswert?

Werd ich mir merken!
Sorry...

von Bitflüsterer (Gast)


Lesenswert?

guest111 schrieb:
> Also das Leerzeichen war nicht das Problem, das hatte ich nur falsch
> angegeben.
>
> Bitflüsterer schrieb:
>>Such einfach im Internet.
>
> Danke für den hilfreichen Tip. Ich hatte nur schon überall gesucht und
> leider nix in der Richtung gefunden...

Woher sollten wir das wissen? Du hast nichts davon geschrieben, was Du 
schon versucht hast.

von Bitflüsterer (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.