'Rectangle' is not a type / freeglut



  • Hallo!

    Ich habe ein kleines Problem mit der Benennung einer Klasse wenn ich mit glut arbeite (und entsprechen glut.h inkludiert habe). Ich konnte das Problem auf folgendes Minimalbeispiel reduzieren:

    #include <GL/glut.h>
    class Rectangle
    {
    
    };
    int main()
    {
      Rectangle *r = new Rectangle();
      return 0;
    }
    

    Führt zu folgendem Fehler:

    C:\Users\ma\Desktop\gdv3\ub2>g++ -c blub.cpp -Ic:\mingw\freeglut\include
    blub.cpp: In function `int main()':
    blub.cpp:8: error: `r' was not declared in this scope
    blub.cpp:8: error: `Rectangle' is not a type
    

    Wenn ich nun die Includezeile auskommentiere oder Rectangle bspw. in Rectangle1 umbennene funktioniert alles wunderbar. Warum? Ich konnte in allen glut-relevanten Headern keine Deklaration von etwas namens "Rectangle" finden.

    Vielen Dank!
    Grüße
    Matthias



  • matthias00 schrieb:

    Wenn ich nun die Includezeile auskommentiere oder Rectangle bspw. in Rectangle1 umbennene funktioniert alles wunderbar. Warum? Ich konnte in allen glut-relevanten Headern keine Deklaration von etwas namens "Rectangle" finden.

    Ich kenne die angegebene Header-Datei leider nicht so gut. Es würde mich dennoch wundern, wenn er hier keine Klasse / Funktion namens Rectangle gibt. Zudem deutet dein Problem darauf hin.

    Zu deinem Code. Fremdbibliotheken jeglicher Art sollte man immer in einem eigenen Namensraum platzieren. Damit lassen sich Probleme dieser Art recht leicht vermeiden.

    z.B.:

    namespace 3rd {
      namespace opengl {
        #include <GL/glut.h>
      }
    }
    


  • Hallo,

    hier [1] das von mir verwendete Paket. Ich konnte dort (und auch in den hier widerrum inkludierten Headern) keine Deklaration mit diesem Namen finden.
    Sollte dann nicht auch eher ein Fehler wie "cannot redeclare xyz" auftreten?

    [1] http://www.martinpayne.me.uk/software/development/GLUT/freeglut-MinGW.zip



  • Hallo matthias00,

    nimm doch GLUT 😉

    Mit freundlichen Grüßen,
    MaBa



  • Der Übeltäter steckte in wingdi.h:

    WINGDIAPI BOOL WINAPI Rectangle(IN HDC, IN int, IN int, IN int, IN int);
    

    Ja, dann werde ich in Zukunft wohl doch Namespaces verwenden.


Anmelden zum Antworten