Forum: Compiler & IDEs Frage zu Strukuren


von Maik (Gast)


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;

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Stefan B. (stefan) Benutzerseite


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
}

  

von Maik (Gast)


Lesenswert?

WOW !!!
Besten Dank für die professionelle HILFE !!!

Bin begeistert !!

Mfg Maik

von Maik (Gast)


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

von Christian (Gast)


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 ;)

von yalu (Gast)


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.

von Oliver (Gast)


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

von johnny.m (Gast)


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;

von Rolf Magnus (Gast)


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.

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.