Frage zu Strukuren

Gast #549461
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;
Persönliche Seite #549478
Lesenswert?
• ▲
▼
1
struct tx
2
{ int x;
3
  int y;
4
} test;
5

6
struct rx
7
{ int x;
8
  int y;
9
} test;
10

11
int main(void)
12
{
13
  test.tx = 3;
14
  test.rx = 4;
15
  return 0;
16
}
1
GNU C version 4.1.1 (WinARM) (arm-elf)
2
  compiled by GNU C version 3.4.2 (mingw-special).
3

4
struct.c:10: error: conflicting types for 'test'
5
struct.c:4: error: previous declaration of 'test' was here
6
struct.c: In function 'main':
7
struct.c:14: error: 'struct rx' has no member named 'tx'
8
struct.c:15: error: 'struct rx' has no member named 'rx'
9
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.
1
struct tx
2
{ int x;
3
  int y;
4
} test_tx;
5

6
struct rx
7
{ int x;
8
  int y;
9
} test_rx;
10

11
int main(void)
12
{
13
  test_tx.x = 3;
14
  test_rx.y = 4;
15
  return 0;
16
}

  
Gast #549489
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
Gast #549502
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 ;)
Gast #549514
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.
Gast #549518
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
Gast #549519
Lesenswert?
• ▲
▼
1
struct
2
{
3
    int x;
4
    int y;
5
} 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.:
1
struct foo
2
{
3
    int x;
4
    int y;
5
} bar1;
6

7
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:
1
struct 
2
{
3
    int x;
4
    int y;
5
} bar1, bar2, bar3;
Der Zugriff auf die einzelnen Elemente geht dann z.B. mit
1
bar1.x = bar3.y;

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.