PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Sturcts und Arrays "expected primary-exprission"



Gsus
30-03-2006, 13:50
Hallo zusammen

hiermein Code

#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>

typedef struct Punkt
{
GLfloat x;
GLfloat y;
GLfloat z;
};

typedef struct Flaeche
{
Punkt pkt1;
Punkt pkt2;
Punkt pkt3;
Punkt pkt4;
Punkt pkt5;
};

/* Funktionsprototypen */
void init(void);
void display(void);

void init(void){
Flaeche flaeche1;
flaeche1 = {{0.4, 0.4, 0.1},
{0.6, 0.4, 0.1},
{0.6, 0.5, 0.1},
{0.5, 0.6, 0.1},
{0.4, 0.6, 0.1} };


}

hier meine Ausgabe:
Zeile 27:Unbenannt3.c expected primary-expression before '{' token
Das ist die Zeile: flaeche1 = {{0.4, 0.4, 0.1},

Da ich gerade in einer Übung sitze bin hier an einer Ungewohnten Windowsumgebung gebunden und kann leider nicht mehr Information liefern. Falls mir jemand helfen kann wäre ich dankbar.Mein Professor kann mir auch nicht helfen :(.



mfg Konrad

Boron
30-03-2006, 14:00
flaeche1 ist doch kein Array :rolleyes:.

Schreibe
flaeche1.pkt1.x = 0.4;
flaeche1.pkt1.y = 0.4;
flaeche1.pkt1.z = 0.1;

flaeche1.pkt2.x = /* Du weißt wie es geht */
usw.

Du musst also die Elemente der Fläche und auch die Koordinaten der Punkte einzeln mit Daten füllen.

Außerdem sollte es meinem Wissen nach
typedef struct
{
GLfloat x;
GLfloat y;
GLfloat z;
} Punkt;heißen. Der Typname also direkt vor dem Semikolon.
So wie du auch
typedef int gaga;

gaga eineZahl;schreiben würdest.

Joghurt
30-03-2006, 18:02
(Edit: Huch, hier geht es ja um reines C, in dem Falle hat Boron natürlich recht. Ich lasse den Post trotzdem da, vielleicht ist es ja für jemanden informativ)


Außerdem sollte es meinem Wissen nach
typedef struct
{
GLfloat x;
GLfloat y;
GLfloat z;
} Punkt;heißen. Der Typname also direkt vor dem Semikolon.Stimmt schon, das ganze Typedef ist aber überflüssing.

In C deklariert
struct foo {};einen typ "struct foo" gleich mit.
In C++ ist das auch so, allerdings heißt der Typ dort nur "foo".

Es reicht also
struct Punkt
{
GLfloat x;
..
};Der einzige Unterschied zwischen struct und class ist übrigens, dass Classdeklarationen per default private sind, während struct per default public sind.

Folgendes ist also äquivalent
struct foo {
int x;
};

class foo {
public:
int x;
};

// Genauso:
class Foo {
public:
Foo();
private:
int x;
};

struct Foo {
Foo();
private:
int x;
};nur sollte man struct natürlich auch wirklich nur für structs und class für Klassen benutzen

Gsus
30-03-2006, 18:48
Hallo danke erstmal fuer die Antworten

naja es ist mehr so eine sache das es eigentlich ja auch so gehen muss habe es in meheren C Einfuehungen extra nochmal nachgelesen so solle dies auch moeglich sein:


struct foo {
int x;
int y;
int z;
}foo;

foo |= {1,2,3}:


ich weiss natuerlich auch das es so geht wie Boron es gesagt hatte aber ich muss sehr viele Fleachen einfuegen und mein Prof hat das sogar alles schoen in einer Datei so schoen stehen das ich dann nur noch kopieren muss.

Fall keiner den Fehler finden sollte werde ich so wie oben beschrieben machen. Danke nochmal

mfg

Konrad

PS: wegen der Diskussion wegen dem Bezeichner nach der geschweiften Klammer so muss das nicht unbedingt hin meines erachtens nach da dies dann nur ein varible des typen structs foo initialisiert waehrend es wenn es nach dem 'struct' hin muss um dem definierten struct einem namen zu geben und das mit dem typedef mach ich aus purer Faulheit damit ich nicht immer noch extra 'struct' hinschreiben muss. In ernsthaften Code lasse ich es weg damit es klar ersichtlich ist das es sich hierbei um ein struct handelt

Boron
30-03-2006, 19:15
Ich möchte mal kurz einen Screeshot aus dem ISO/IEC C99 Standard präsentieren.
Da sieht man sehr deutlich, dass der type_identifier, also der Typname range, hinter der geschweiften Klammer steht. Da gehört er auch hin!
Bei einer solchen Typdefinition eines structs wird dann KEINE Variable mit diesem Namen angelegt, sondern dem neu definierten Typ einen Namen gegeben.

Variablen anlegen wie gehabt: NeuerTypName variablenName;

Gsus
30-03-2006, 19:18
Hallo
Ich gebe mich geschlagen und knie nieder vor meinem neuen Meister. :rolleyes:

Okay 8 Semester Angewandte Informatik... ich bin froh das es fuer uns keine Pisa Studie gibt.

Ich weiss aber was ich zu machen habe.

mfg

gsus