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. 🙂


  • Mod

    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. 😕


  • Mod

    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.


Anmelden zum Antworten