C - Was ist an folgendem Code falsch?

Diskutiere C - Was ist an folgendem Code falsch? im Developer Network Forum im Bereich Hardware & Software Forum; Hallo zusammen, kann jemand von euch sagen was an folgendem C-Code falsch ist? Ich komme irgendwie nicht drauf. Das Ganze ist ein quatratisches...
  • C - Was ist an folgendem Code falsch? Beitrag #1
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
Hallo zusammen,

kann jemand von euch sagen was an folgendem C-Code falsch ist?
Ich komme irgendwie nicht drauf. Das Ganze ist ein quatratisches Feld X*Y, und ich möchte einfach mehrere Strukturen vom Typ LoesungsData initialisieren. In diesem Beispiel mache ich es ja nur einmal, was aber egal ist erst mal. Natürlich ist das Ganze nur ein Teil von einem Programm (Das wird ein Labyrinth Spiel).

Hier der Code (inkl. Zeilen-Nummer):
Code:
1) #include <stdio.h>
2)
3) enum {X=100, Y=100};
4)
5) typedef char QUADRAT[X][Y];
6)
7) typedef struct{
8)     int i;
9)     int j;
10) }Feld;
11)
12) typedef Feld Weg[X*Y];
13)
14) typedef struct{
15)   QUADRAT q;
16)    int n;
17)    int m;
18)    Weg w;
20)    int length;
21)    int loesungsnummer;
22) }LoesungsData;
23) LoesungsData LData[X*Y];
24)
25)
26) int main()
27) {
28)    QUADRAT quad;
29)    Weg weg;
30)    int m = 0;
31)    int n = 0;
32)    int laenge = 0;
33)
34)    LData[0].q = quad;
35)    LData[0].m = m;
36)    LData[0].n = n;
37)    LData[0].w = weg;
38)    LData[0].length = laenge;
39)    LData[0].loesungsnummer = 0;
40)
41)    return 0;
42) }
Und hier die Fehlermeldung:
Zeile 34: incompatible types when assigning to type »QUADRAT« from type »char (*)[100]«
Zeile 37: incompatible types when assigning to type »Weg« from type »struct Feld *«

Also, "quad" ist vom Typ Quadrat, sowie q in der Struktur. Und weg ist vom Typ Weg sowie w in der Struktur es auch ist. Wo liegt denn hier das Problem?

Danke euch.

VG
Niko
 
  • C - Was ist an folgendem Code falsch? Beitrag #2
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Scheint einfach daran zu liegen, dass man in C einem Array nicht einfach ein anderes Array zuweisen kann ...

so liefe das:
Code:
#include <stdio.h>

enum {X=100, Y=100};

typedef char QUADRAT[X][Y];

typedef struct{
    int i;
    int j;
}Feld;

typedef Feld Weg[X*Y];

typedef struct{
    QUADRAT q;
    int n;
    int m;
    Weg w;
    int length;
    int loesungsnummer;
}LoesungsData;
LoesungsData LData[X*Y];

int main()
{
   QUADRAT quad;
   Weg weg;
   int m = 0;
   int n = 0;
   int laenge = 0;
   int i = 0;
   int j = 0;

   for(; i < X; i++)
      for(; j < Y; j++)
         LData[0].q[i][j] = quad[i][j];
   LData[0].m = m;
   LData[0].n = n;
   for(i = 0; i < X * Y; i++)
         LData[0].w[i] = weg[i];
   LData[0].length = laenge;
   LData[0].loesungsnummer = 0;
   return 0;
}

Wenn es darum ginge die Werte aus dem einen Array dem anderen zuzuweisen...

Wenn du aber 1 Array hinter beiden Variablen haben möchtest, musst du wohl aus dem LoesungsData.q bzw LoesungsData.w Pointer (von Pointern) machen aber da bin ich mir bei C nicht sicher ... Darauf gestoßen bin ich nur durch nen C++ Compiler, der sagt dass ISO C++ keine Arrayzuweisungen erlaubt.
 
  • C - Was ist an folgendem Code falsch? Beitrag #3
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
Hi TrμMAn,
Scheint einfach daran zu liegen, dass man in C einem Array nicht einfach ein anderes Array zuweisen kann ...
Also das ist verständlich und ja, ich hätte selbst drauf kommen müssen.

Hast mir die Augen aufgemacht :)

Allerdings würde ich gerne wissen was die Tatsache, dass einfach einem Array nicht ein anderes zugewiesen werden kann, mit der Meldung "incompatible Types" zu tun hat. Das nervt einfach.
Gut dass der C++ Compiler ein bisschen "eindeutiger" ist :)
 
  • C - Was ist an folgendem Code falsch? Beitrag #4
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Allerdings würde ich gerne wissen was die Tatsache, dass einfach einem Array nicht ein anderes zugewiesen werden kann, mit der Meldung "incompatible Types" zu tun hat.

Das wird wohl wiederum daran liegen, dass für den C Compiler die Typen "Array" und "Array" bei einer Zuweisung einfach inkompatibel sind.

Die Fehlermeldung ist nicht falsch, aber auch nicht verständlich. Kein Wunder, dass es in früheren Programmen genau so unverständliche Fehlermeldungen gab, die Programmierer waren vom Compiler nichts anderes gewohnt.
 
  • C - Was ist an folgendem Code falsch? Beitrag #5
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
Die Fehlermeldung ist nicht falsch, aber auch nicht verständlich.
Genau das meinte ich auch dass es nervt :) Falsch ist die wohl nicht, da hast du Recht.
Vor allem bei dem C Compiler ist das so. Und manchmal sieht man in PHP ein paar Warnungen oder Fehler die wie hier, nicht falsch sind, der Grund liegt aber wo anders. Je nach Erfahrung findet man es dann auch schnell.

Meine Haupt-Entwicklungs-Sprachen sind PHP (Apache etc.) und auch noch .NET (mit C#) usw. Je nachdem was zu tun ist.
Das hier liegt im Rahmen einer kleinen C Anwendung die ich für jemand anders schreiben wollte. Im endeffekt haben wir es dann doch gemacht allerdings ein bisschen anders, jedoch war ich so richtig neugirig warum es an dieser Stelle eine Fehlermeldung gab.

Danke für die Hilfe.
 
Thema:

C - Was ist an folgendem Code falsch?

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.177
Beiträge
1.579.167
Mitglieder
55.871
Neuestes Mitglied
Mein-Helmut
Oben