Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.12.2014, 19:30

OpenGL C++ Nicht deklarierter bezeichner Fehlermeldung

Hallöchen
Ich bins wieder mal nach langer Zeit.
Ich habe ein Program mit OpenGL dass einen Kreis zeichnet, jedoch sagt er mir beim kompilieren, dass der Bezeichenr "display" nicht gefunden wurde obwohl ich eine Funktion dazu habe.
Original Fehlermeldung: error C2065: 'display': nichtdeklarierter Bezeichner
Das gleiche für die Funktion RenderCircle.

Mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "glut.h"
#include <cmath>
int main(int argc, char* argv[])
{
    // GLUT mit Kommandozeilenparametern initialisieren
    glutInit(&argc, argv);
    // Fenster mit Titel öffnen
    glutCreateWindow("Formen");
    // unsere eigene Anzeigefunktion setzen
    glutDisplayFunc(display);
    // Hauptschleife des Programms aufrufen
        glutMainLoop();

    // Alles ok, Programm beenden
    return 0;

    
}

void display(void)
{
    // Hintergrundfarbe (rgba) setzen
    glClearColor(0.0, 0.0, 0.0, 1.0);

    // Hintergrund löschen
    glClear(GL_COLOR_BUFFER_BIT);
    // orthogonale Projektion setzen (2D)
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1.5, 1.5,  // X Achsen Koordinaten von..bis
        -1.5, 1.5,  // Y Achsen Koordinaten von..bis
        -1.0, 1.0); // Z Achsen Koordinaten von..bis
    // Quadrat zeichnen
    //glColor3f(0.2f, 0.2f, 0.2f);
    //renderSquare();
    // Kreis zeichnen
    glColor3f(0.8f, 0.8f, 0.8f);
    renderCircle(50);
    // Stern zeichnen
    //glColor3f(0.5f, 0.5f, 0.5f);
    //renderStar(5);
    // Hinteren Bildschirmpuffer nach vorne bringen
    glutSwapBuffers();

} // display()

void renderCircle(unsigned int steps)
{
    // Dreiecksfächer zeichnen
    glBegin(GL_TRIANGLE_FAN);

    // Zentrum (ertsten Punkt) setzen
    glVertex2f(0.0f, 0.0f);
    for (unsigned int i = 0; i <= steps; i++)
    {
        double PI = 3.1415731;
        // Umlaufenden Winkel berechnen
        float angle = float(i) / float(steps) * 2.0f * PI;

        // Kreisfunktionen Sinus und Cosinus verwenden
        float x = sinf(angle);
        float y = cosf(angle);

        // Punkt setzen
        glVertex2f(x, y);
    }
    // Ende des Dreiecksfächers
    glEnd();

} // renderCircle()


Danke im Voraus!

2

10.12.2014, 19:34

Habs bereits geschafft! :D

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

10.12.2014, 19:55

Ich weiß zwar wo das Problem liegt, aber statt nur zu sagen, dass Du es geschafft hast, wäre es das nächste Mal sinnvoll auch zu sagen was falsch war.
Hier lag das Problem einfach nur in der Reihenfolge der Funktionsdeklaration. Es wurden Funktionsnamen verwendet, die erst später im Code deklariert wurden. Lösungen wären entweder die Reihenfolge zu tauschen oder eine Forward-Declaration zu verwenden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

10.12.2014, 19:56

Dann schreib doch bitte auch dazu wie du das Problem gelöst hast. Bzw mach das bitte beim nächsten mal. In diesem Fall ist es dass die Funktionen zuerst definiert bzw deklariert werden müssen bevor sie aufgerufen werden. Stichwort wäre hier Forward Declaration.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

10.12.2014, 19:57

Ich weiß zwar wo das Problem liegt, aber statt nur zu sagen, dass Du es geschafft hast, wäre es das nächste Mal sinnvoll auch zu sagen was falsch war.
Hier lag das Problem einfach nur in der Reihenfolge der Funktionsdeklaration. Es wurden Funktionsnamen verwendet, die erst später im Code deklariert wurden. Lösungen wären entweder die Reihenfolge zu tauschen oder eine Forward-Declaration zu verwenden.
Genau! Ich hab sie einfach ausgetauscht und werde deinen Tip in Zukunft beachten.

Werbeanzeige