PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : warum funzt das nicht? (GLUT)


Kennung Eins
2002-12-04, 15:58:57
Ich verstehe absolut nicht, wieso der bei einer einfachen FOR-SCHLEIFE meckert! grrrr... (unten steht die Fehlermeldung)

Ist da irgendeine Typdeklaration falsch? Was will der Compiler bei seinen Ausgaben mit "Fehlendes ';' vor 'type'" ??

Sorry, C / C++ ist nicht mein Ding...

#include <GL/glut.h>

void display(void)
{

glViewport( 0, 0, 300, 200);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0, (GLfloat)300 / (GLfloat)200, 0.1, 100.0);

glMatrixMode(GL_MODELVIEW);


glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(0.0, 0.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);

glRotatef(20, 0.0, 1.0, 0.0);


/*

[ R ] [ 3.240479 -1.537150 -0.498535 ] [ X ]
[ G ] = [ -0.969256 1.875992 0.041556 ] [ Y ]
[ B ] [ 0.055648 -0.204043 1.057311 ] [ Z ]

1/M * RGB = 1/M * M * XYZ

*/

for (double i=0.0;i<2.5;i=i+2.5/60)
{
glBegin(GL_QUADS);
glColor3f(i/2.5,0,0);
glVertex3f(i,0.041,0.0);
glVertex3f(i+0.041,0.041,0.0);
glVertex3f(i+0.041,0.0,0.0);
glVertex3f(i,0.0,0.0);
glEnd();
}

glutSwapBuffers();

}


int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Oktaeder");
glutDisplayFunc(display);

glEnable(GL_DEPTH_TEST);

glutMainLoop();
return 0;
}
--------------------Konfiguration: oktaeder4 - Win32 Debug--------------------
Kompilierung läuft...
oktaeder4.c
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : error C2065: 'i' : nichtdeklarierter Bezeichner
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
C:\Uni\Computergrafik\Übung6\oktaeder4.c(38) : error C2059: Syntaxfehler : ')'
C:\Uni\Computergrafik\Übung6\oktaeder4.c(39) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
Fehler beim Ausführen von cl.exe.

oktaeder4.exe - 7 Fehler, 1 Warnung(en)

Xmas
2002-12-04, 16:44:59
Kompiliert absolut ohne Fehler, allerdings sehe ich nur einen von Schwarz nach Rot verlaufenden Strich. VC6 frisch installiert sowie ne recht alte glut.h von 1998 dazu. Ich vermute stark der Fehler liegt in der Header-Datei.

Kennung Eins
2002-12-04, 16:53:09
Hm ok, dann lade ich mir glut nochmal neu runter, am besten mehrere Versionen... thx Xmas!

...bin fast verzweifelt gestern :-/

zeckensack
2002-12-04, 17:10:58
Was'n das für'n Compiler?

Borland?

Versuch mal die Schleifenvariable außerhalb zu deklarieren, alsodouble i;
for (i=0.0;i< blabla

Kennung Eins
2002-12-04, 17:23:00
Nee, ist Microsoft. Leider hat neuinstallieren des Gluts nix gebracht.
Hab jetzt angefangen das in Delphi zu schreiben, da geht es wenigstens.

Ich bekomm dann damit zwar nicht volle Punktzahl (wenn die es mir überhaupt so abnehmen) ... hmm.. vielleicht muß ich das doch noch irgendwie in C hinkriegen... ach menno...

Das aussen deklarieren half auch nix :(

zeckensack
2002-12-04, 17:33:12
Originally posted by Kennung Eins
Nee, ist Microsoft. Leider hat neuinstallieren des Gluts nix gebracht.
Hab jetzt angefangen das in Delphi zu schreiben, da geht es wenigstens.

Ich bekomm dann damit zwar nicht volle Punktzahl (wenn die es mir überhaupt so abnehmen) ... hmm.. vielleicht muß ich das doch noch irgendwie in C hinkriegen... ach menno...

Das aussen deklarieren half auch nix :( Ganz wichtige Frage mal so nebenbei:
Der Name der Quellcode-Datei hat hinten nicht zufällig ein ".c"???

Wenn ja
->aus dem Projekt entfernen, Datei in "blablubb.cpp" umbenennen und wieder einfügen.

In C-Modulen dürfen lokale Variablen nur am Funktionskopf deklariert werden, von daher wäre die Variante dort nicht legal. Erst C++ hebt diese Beschränkung auf, und der MS-Compiler trifft diese Unterscheidung anhand der Dateiendung.

HTH :)

zeckensack
2002-12-04, 17:34:25
Originally posted by zeckensack
Ganz wichtige Frage mal so nebenbei:
Der Name der Quellcode-Datei hat hinten nicht zufällig ein ".c"???Aaaah! Ich hab's in der Fehlermeldung gesehen!

Genau das wird's sein, also schnell mal ein .cpp draus machen, dann geht's auch :jump1:

Kennung Eins
2002-12-04, 17:56:53
OMG!!

ES FUNKTIONIERT!!! http://www.guru3d.com/forum/images/smilies/knuddel.gif

Thx a lot!! :)
Auf sowas muß man erstmal kommen ... ?-)

Kennung Eins
2002-12-05, 19:58:38
btw, da stehts:
http://home.arcor.de/iotha/Progs/ciexyz.ace

hab es nur für delphi hochgeladen :)

Vedek Bareil
2002-12-06, 03:26:03
mal ne ganz dumme Frage am Rande:
du schreibst in der Schleife i=i+2.5/60 Wäre i+=2.5/60 nicht besser?
AFAIK wird in der ersten Variante der Speicherbereich von i zweimal aufgerufen, einmal um den alten Wert von i auszulesen und ein zweites Mal zum Einschreiben des neuen Wertes, wohingegen in der zweiten Variante der Speicherbereich nur einmal aufgerufen wird.
Oder braucht man auf so etwas keine Rücksicht zu nehmen, da moderne Compiler ohnehin den Code entsprechend optimieren?

Kennung Eins
2002-12-06, 11:45:07
Ja hast schon recht, solche kosmetischen Sachen hab ich zum Schluß auch noch gemacht :)
Das dumme war halt nur, daß selbst dieser primitive Code nicht lief, darum hab ich alles andere erstmal nicht weitergemacht...

Xmas
2002-12-06, 17:53:01
Originally posted by Vedek Bareil
mal ne ganz dumme Frage am Rande:
du schreibst in der Schleife i=i+2.5/60 Wäre i+=2.5/60 nicht besser?
AFAIK wird in der ersten Variante der Speicherbereich von i zweimal aufgerufen, einmal um den alten Wert von i auszulesen und ein zweites Mal zum Einschreiben des neuen Wertes, wohingegen in der zweiten Variante der Speicherbereich nur einmal aufgerufen wird.
Oder braucht man auf so etwas keine Rücksicht zu nehmen, da moderne Compiler ohnehin den Code entsprechend optimieren?
Selbst bei einem "unmodernen" Compiler würde es keinen Unterschied machen ;)