Fehlermeldung in unistd.h [gelöst]
-
Hallo,
ich habe ein Projekt, welches unter ubuntu 10.04 32 Bit und unter kubuntu 11.10 64 Bit kompilieren geht. Nun habe ich ein Debian 7.5 64 Bit und hier scheitert das Kompilieren.
Beim Versuch das Projekt zu kompilieren erhalte ich folgende Fehlermeldung:g++ -c -Wall -g GLSystem/GLWindow.cpp -o GLSystem/GLWindow.o In file included from GLSystem/GLWindow.cpp:225:0: /usr/include/unistd.h: In member function ‘void GLWindow::makeScreenshot(std::string, std::string)’: /usr/include/unistd.h:28:1: error: expected unqualified-id before string constant GLSystem/GLWindow.cpp:260:1: error: expected ‘}’ at end of input make: *** [GLSystem/GLWindow.o] Fehler 1
Ein normaler Klammerfehler hätte ja auch auf den anderen beiden Systemen nicht funktionieren dürfen. Um den Fehler besser zu finden, habe ich in GLWindow.cpp alles auskommentiert, was nicht direkt mit dem include zutun hat. So sieht meine GLWindow.cpp ohne Kommentare jetzt noch aus:
#include "GLWindow.h" #define LINUX void GLWindow::makeScreenshot(std::string path, std::string name) { #ifdef LINUX #include <unistd.h> #define Buffer 1024 #endif }
Aber trotzdem tritt der gleiche Fehler nach wie vor auf.
Hier nochmal die GLWindow.h, falls sie weiterhilft:#ifndef GL_WINDOW #define GL_WINDOW #include <string> #define LINUX #ifdef LINUX #include <SDL/SDL_video.h> #else #include <SDL_video.h> #endif class GLWindow { public: GLWindow(int width = 800, int height = 600, int bpp = 32, bool full = false, const std::string& caption = "3D Window", const std::string& taskcaption = "3D App"); //Copy- und Gleichsetzungsoperatoren GLWindow(const GLWindow& src); GLWindow& operator=(const GLWindow& src); ~GLWindow(); //Fenster erstellen bool create(); //Fenster zerstören bool destroy(); //Bild leeren void clear(); //Bild updaten void update(); //Werte setzen /*void setOrthocam(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax); void setPerscam(double left, double right, double bottom, double top, double zNear, double zFar);*/ void setBackcolor(double r = 0, double g = 0, double b = 0, double a = 0); void setResolution(int width, int height); void setColorDepth(int bpp); void setIcon(SDL_Surface* icon); void setCaptions(const std::string& caption, const std::string& taskcaption); void setFullscreen(bool full = true); //Zeiger auf Fenstersurface zurückliefern SDL_Surface* getSurface(); void getResolution(int* width, int* height) {*width = Width; *height = Height;} void makeScreenshot(std::string path, std::string name); private: int Width; int Height; int Bpp; bool Full; std::string Caption; std::string Taskcaption; SDL_Surface* Surface; SDL_Surface* Icon; bool UseIcon; bool Open; double R; double G; double B; double A; }; #endif
Ich habe schon die unistd.h der beiden 64 Bit Systeme verglichen. Die sind identisch. Also eine defekte unistd.h kann es auch nicht sein.
Hat jemand eine Idee oder sieht zufälligerweise vielleicht direkt woher der Fehler plötzlich kommt?
Schonmal danke fürs anschauen.
-
Dein #include<unistd.h> steht ja in einer Funktion!
-
Ja, ich wollte gerade fragen, ob man das nicht machen darf. Aber hab es gerade mal nach oben gestellt und es kompiliert ohne Fehler.
Also scheinbar haben da einige Systeme was dagegen. Danke für die Schnellhilfe!
Weil in der "#ifdef Linux" noch Operationen standen, die die unistd.h nutzen und ich sie sonst auch nirgends brauche, hatte ich sie direkt dort mit eingebunden. Wie gesagt, die anderen beiden Systeme haben sich da drüber auch nicht beschwert gehabt. Wusste nicht, dass so was in C++ zu Problemen führen kann.
-
include ist eine reine Textersetzung. In einem Header stehen normalerweise Deklarationen von Funktionen und Datenstrukturen. Wenn diese nun in einer Funktion stehen, ist das logischerweise ungültig.
Das hat nichts mit "einigen Systemen" oder "C++" zu tun, das ist immer so.