www.mikrocontroller.net

Forum: Compiler & IDEs Frage zu Strukuren


Autor: Maik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
ich habe zwei Strukturen mit unterschiedlichen Namen:


struct tx
{ int x;
  int y;

} test;


strcut rx
{ int x;
  int y;

} test;

Will ich diese unabhängig von einander nutzen, meckert meine Compiler !
Wie kann das ?

Die Variable test wird doch nur in Zusammenhang mit der richtigen 
Struktur
aufgerufen!!

test.rx = 3;
test.tx = 4;

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Will ich diese unabhängig von einander nutzen, meckert meine Compiler !
> Wie kann das ?

Könntest Du das "Meckern" auch noch beschreiben? Meine Glaskugel liegt 
gerade im Koma.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct tx
{ int x;
  int y;
} test;

struct rx
{ int x;
  int y;
} test;

int main(void)
{
  test.tx = 3;
  test.rx = 4;
  return 0;
}

GNU C version 4.1.1 (WinARM) (arm-elf)
  compiled by GNU C version 3.4.2 (mingw-special).

struct.c:10: error: conflicting types for 'test'
struct.c:4: error: previous declaration of 'test' was here
struct.c: In function 'main':
struct.c:14: error: 'struct rx' has no member named 'tx'
struct.c:15: error: 'struct rx' has no member named 'rx'
struct.c:17:2: warning: no newline at end of file

1/ Du darfst den Variablennamen test nicht zweimal vergeben.
2/ Du musst auch die einzelnen Elemente der jeweiligen Struktur 
ansprechen.

Lauffähig ist z.B.
struct tx
{ int x;
  int y;
} test_tx;

struct rx
{ int x;
  int y;
} test_rx;

int main(void)
{
  test_tx.x = 3;
  test_rx.y = 4;
  return 0;
}


  

Autor: Maik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WOW !!!
Besten Dank für die professionelle HILFE !!!

Bin begeistert !!

Mfg Maik

Autor: Maik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allerdings - warum sollte das nicht gehen?

Das sind doch eigentlich zwei Unterschiedliche Strukturen.
Ich bin mir sicher das es geht, nur ich bin mir nicht so ganz sicher, 
wie es programmiert wird!

Ich möchte test als Variabel für zwei Unterschiedliche Strukturen 
behalten!

Vielleicht hat jemand noch ne andere Programmierung ???

test.rx = 3;
test.tx = 4;

Mfg Maik

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned int test;
unsigned char test;

test=1;
test=0;

Das funktioniert gnau so wenig.
Du hast 2 UNTERSCHIEDLICHE Strukturen deklariert.

Du kannst für 2 unterschiedliche Dinge nicht den gleichen Namen 
benutzen.
Ganz einfach ;)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu einem Variablennamen gehört immer genau ein Typ.

> test.rx = 3;
> test.tx = 4;

Das geht nicht. Du schreibst

  <Variablename>.<Strukturname>

Die einzig zulässige Schreibweise in C ist in diesem Zusammenhang

  <Variablename>.<Selektorname>

> Vielleicht hat jemand noch ne andere Programmierung ???

Was hast du denn ingesamt vor, wozu du diese Konstrukte brauchst?
Vielleicht gibt es ja dafür ne andere Programmierung.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und

struct rx
{ int x;
  int y;

} test;


test.rx = 3;

geht zusätzlich nochmal nicht. Die Zuweisung ist verkehrt, selbst wenn 
du nur eine Variable test anlegst. rx ist der Typname des structs, der 
hat in der Zuweisung nichts verloren.

test.x = 3;

wäre richtig.

Oliver

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct
{
    int x;
    int y;
} test_rx, test_tx;
tuts auch. Ich glaube, Du hast bei der Deklaration von structs etwas 
gründlich missverstanden. Der Bezeichner, der hinter dem "struct" (vor 
der öffnenden Klammer) steht, ist optional und bezeichnet die struct an 
sich. Gibt man ihn an, dann kann man ihn bei weiteren Deklarationen 
verwenden, z.B.:
struct foo
{
    int x;
    int y;
} bar1;

struct foo bar2, bar3;
bar1, bar2 und bar3 sind jetzt alle identisch aufgebaute 
Strukturvariablen mit dem Aufbau von "foo". Die Variablennamen an sich 
stehen HINTER der schließenden Klammer.

Ich hoffe, das macht es etwas klarer.
Wenn man keine weiteren structs des selben Typs im weiteren 
Programmverlauf deklarieren will, dann kann man den Bezeichner foo 
weglassen:
struct 
{
    int x;
    int y;
} bar1, bar2, bar3;
Der Zugriff auf die einzelnen Elemente geht dann z.B. mit
bar1.x = bar3.y;

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ganz einfach so, daß man nicht zwei Variablen mit gleichem Namen 
haben kann. Von welchem Typ die beiden sind, spielt dabei überhaupt 
keine Rolle.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.