Gast
#3132683
Tag,
1 | |
2 | |
3 | |
4 | |
wird im Atmel Studio 6 mit:
1 | |
quittiert. Warum?
|
Anzeige
|
Struktur wir nicht kompiliert?
Gast
#3132683
Tag,
wird im Atmel Studio 6 mit:
quittiert. Warum? Wenn du das typedef weg lässt, sollte es gehen. Einer Variablen kannst du etwas zuweisen, einer Typdefinition nicht. Weil du keine Variable x angelegt hast, sondern einen Typ x der eine Struktur ist. Entweder du lässt das typedef weg, oder du machst:
Gast
#3132707
das habe ich alles schon probiert - es will nicht gehen:
ist gleich mit dem beispiel oben...
Gast
#3132710
unamed structs oder anonymous structs gehen erst mit cx11, also entweder mit -std=c11 kompilieren, oder die obigen Tipps befolgen. http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html Ich weiß aber nicht ob der Compiler beim Atmel Studio das schon kann.
Gleichzeitig links und rechts abzubiegen führt mindestens zu Blechschaden. Also entweder mit einem Typ arbeiten, oder mit einer Variablen. "x" ist nun eine Variable und "x y" folglich Käse. Das Forum ist kein C Einführungskurs für völlig Ahnungslose. Bücher können das besser.
Gast
#3132714
der typedef muss weg, siehe http://c-buch.sommergut.de/Kapitel13/Strukturen.shtml tare schrieb: > unamed structs oder anonymous structs gehen erst mit cx11, also > entweder mit -std=c11 kompilieren Code wie
gibts seit Anbeginn von C. tare schrieb: > der typedef muss weg Hat er ja gemacht und das war auch wieder falsch. Weil er beide sich ausschliessenden Tipps von Stephan gleichzeitig verfolgte.
Gast
#3132722
Danke, dafür. Ich hab in's Buch geschaut. Und es ging nicht wie beschrieben. Deswegen die Frage hier... Und es geht auch nicht mit:
Zumal mir AtmelStudio beim tippen von 'y.' das Member 'state0' anbietet Allmählich hast du bei "Versuch und Irrtum" alle falschen Varianten durch, irgendwann muss einfach die richtige folgen. ;-) Strukturnamen sind genauso wenig Variablen wie Typdefinitionen
Gast
#3132755
mh, dacht ich ja auch... Jetzt habe ich mein Projekt gesclossen und ein neues erstellt. Und nur eine Struktur -wie im Buch!- angelegt:
ergiebt:
Wozu gibt es dann solche Bücher?
Gast
#3132768
Mache Dir den Unterschied klar zwischen 1. Einer Strukturdefinition 2. Einem Datentyp 3. Einer Instanz Erst eine Instanz ist das, was im RAM (oder ROM) liegt. 1. Möglichkeit:
Wichtig: die vollständige Typbezeichnung lautet "struct meinTyp". Das "struct" kann man nicht weglassen! 2. Möglichkeit:
3. Möglichkeit:
Falls man die Definition nicht an anderer Stelle benötigt (z.B. weil man noch eine Instanz anlegen will, oder weil man den Pointertyp benötigt), kann man den Namen der Struct (nicht der Instanz!) der Einfachheit halber weglassen. 4. Möglichkeit:
Hier wird nun ein neuer Datentyp angelegt. Erst dieses erlaubt es Dir, das "struct" wegzulassen. 5. Möglichkeit:
mike schrieb: > Wozu gibt es dann solche Bücher? Entweder taugt das Buch nur als Unterlage, oder es steht dort etwas anders drin - oder es ist ein C++ Buch. In C++ geht das nämlich. Bronco schrieb: > Erst eine Instanz ist das, was im RAM (oder ROM) liegt. Noch ein Tipp: In der vor-objektorientierten Zeit sagte man statt "Instanz" auch "Variable".
Gast
#3132789
A. K. schrieb: > oder es ist ein C++ Buch. In C++ geht das nämlich. Reusper! ja, isses.... Aber: Sogar hier aus dem Forum: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Bitfelder ergiebt: 'x' does not name a type
Gast
#3132790
ich mach Pause, meine Frau will Schuhe kaufen - ich geh mit! mike schrieb: > ich mach Pause, meine Frau will Schuhe kaufen - ich geh mit! Mein Beileid. ;-) >> oder es ist ein C++ Buch. In C++ geht das nämlich. > Reusper! ja, isses.... Dann sag das dem Compiler. Sonst meint er, es sei C. > 'x' does not name a type Das hast du garantiert nicht genau so gemacht, wie es dort steht.
Gast
#3132810
mike schrieb: > 'x' does not name a type Du hast meinen Beitrag nicht gelesen, oder?
Es gibt in Deinem Beispiel keinen Datentyp "Wertepaar". Du verwendest "Wertepaar" aber als Datentyp! Bronco schrieb: > Du hast meinen Beitrag nicht gelesen, oder? > >
Und nochmals: das ist C++. In C muss man es so schreiben:
oder, wer sich die Welt mit dem typedef einmal mehr um die Ecke biegen will, damit er das “struct” dann weglassen kann:
Im ersteren Fall bildet „struct Wertepaar“ den Typnamen, im zweiten Fall dagegen „Wertepaar“, welches ein typedef für eine (ansonsten anonyme) Struktur ist. Wer's unbedingt will:
Damit wird sowohl im struct namespace als auch im regulären namespace der Name „Wertepaar“ etabliert. Das ist sogar in C++ zulässig, obwohl es ja dort den Namen „Wertepaar“ theoretisch doppelt definiert.
Gast
#3132966
Das kann doch nicht so schwer sein?! Das ist doch jetzt so für C richtig, oder nicht? Test.c
Compileraufruf: "avr-gcc.exe" -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "Test.d" -MT"Test.d" -MT"Test.o" -mmcu=atmega328p -o"Test.o" ".././Test.c" Ergebnis: Error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
Gast
#3132971
mike schrieb: > Ergebnis: > Error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token wenn soll den code ausgeführt werden der in keiner funktion steht?
Gast
#3132975
versuch mal, dass du die zeile: x.wer1=1; ins main verschiebst ...
Gast
#3132978
Gast
#3132989
mh, geht! und wieso das jetzt? 'andere' Variablen lassen sie doch auch ausserhalb von main deklarieren? Dein x.wert1=1; ist aber weder Deklaration noch Initialisierung, sondern
eine Zuweisung. Und die passt nur in eine Funktion. Auch in C++.
Eine Initialisierung wärs mit
struct test x = { 1, 2 };
Gast
#3133008
Verstanden! Dank Euch allen...! Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|