Fehler in cstring!?



  • Ok, ich hab versuch als aller erstes <cstring> zu inkludieren, das hat aber nichts gebracht. 😞

    Naja, ich poste jetzt die wichtigen Stellen aus allen involvierten Dateien, also nur die Teile der Header wo inkludiert wird:

    Hauptdatei:

    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif
    
    #include <iostream>
    #include <cstring>
    #include <vector>
    #include "playground.h"
    #include "event.h"
    #include "window.h"
    using namespace playground;
    
    ...
    

    playground.h

    #ifndef PLAYGROUND
    #define PLAYGROUND
    
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include "log.h"
    
    using namespace std;
    
    #define DO_ONCE(action) { static bool x = false; if(x = !x) { action } }
    
    namespace playground {
    
      // Globale Variablen für playground
      extern std::string    name; //!< Name der Applikation / des Spiels (Fenstertitel)
      extern logstream log;  //!< Globaler Log-Stream
    
      // Globale Funktionen für playground
      bool  init(string name); //!< Initialisierung der Engine
      void  shutdown(); //!< "Runterfahren" der Engine
    
    } // playground
    
    #endif
    

    geometry.h

    #ifndef PLAYGROUND_GEOMETRY
    #define PLAYGROUND_GEOMETRY
    
    #include <cstdlib>
    #include <iostream>
    #include <string>
    using namespace std;
    
    namespace playground {
    ...
    

    log.h

    #ifndef PLAYGROUND_LOG
    #define PLAYGROUND_LOG
    
    #include <iostream>
    #include <fstream>
    #include <string>
    #include "geometry.h"
    using namespace std;
    
    namespace playground {
    
      class logstream : public std::ofstream
      {
        public:
          logstream& operator << (Vertex  v);
      };  
    
    } // playground
    
    #endif
    

    object.h

    #ifndef PLAYGROUND_OBJECT
    #define PLAYGROUND_OBJECT
    
    #include <cstdlib>
    #include <string>
    #include <SDL/SDL.h>
    #include "geometry.h"
    using namespace std;
    
    namespace playground {
    ...
    

    string.h (eine benutzerdefinierte String-Klasse)

    #ifndef PLAYGROUND_STRING
    #define PLAYGROUND_STRING
    
    #include <iostream>
    using namespace std;
    
    namespace playground {
    
    class String {
    ...
    

    texture.h

    #ifndef PLAYGROUND_TEXTURE
    #define PLAYGROUND_TEXTURE
    
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <GL/glext.h>
    #include <vector>
    #include "playground.h"
    using namespace std;
    
    namespace playground {
    ...
    

    window.h

    #ifndef PLAYGROUND_WINDOW
    #define PLAYGROUND_WINDOW
    
    #include <cstdlib>
    #include <SDL/SDL.h>
    #include <GL/glu.h>
    #include "playground.h"
    using namespace std;
    
    namespace playground {
    
      class Window 
      {
    ...
    

    So, das müsste alles sein, was von Bedeutung ist.



  • Ich würde sagen es liegt an deiner Fragwürdigen benutzung von namespaces!



  • Ist es nicht eigentlich unüblich sich seine eigenen Namensbereiche zu basteln? Jedenfalls wusste ich vorher noch nicht einmal, dass dass geht!

    Mfg Ominion



  • Ominion schrieb:

    Ist es nicht eigentlich unüblich sich seine eigenen Namensbereiche zu basteln? Jedenfalls wusste ich vorher noch nicht einmal, dass dass geht!

    Nein, das sollte man eher so machen. Dafür sind namespaces ja schließlich gedacht 🙄



  • *hmpf*

    Hm, nman, kannst du mir sagen wann deine Kristallkugel ungefähr wieder aus der Werkstatt zurückkommt? 😉

    Naja, ich weiß ehrlich gesagt nicht, was an meiner Verwendung von Namespaces "fragwürdig" ist. Könntest du mich bitte aufklären, Storm.Xapek.de?

    Und kingruedis Aussage unterschreibe ich so!!

    Wie auch immer, das Problem ist immer noch nicht gelöst. Ich werde wohl noch eine Weile damit zu tun haben. :-\



  • Es ist sehr fragwürdig Namespaces in Header Dateien zu öffnen (also using namespace).

    Ansonsten mach ein minimales Beispiel und poste das. Offensichtlich versuchst du auf Dinge im globalen Namespace zuzugreifen, die dort nicht sind 🙂



  • Ok vielleicht habe ich schon zu lange kein C++ mehr programmiert... 😕

    Ich versuche gerade krampfhaft den Fehler zu reproduzieren, habs aber bisher noch nicht hinbekommen. Ich habe den kompletten Source mal hochgeladen:
    source.tar.gz

    Erstmal soweit danke. Es muss ja irgendwie was mit den Namespaces zu tun haben.
    Werde weiter versuchen.



  • Bei mir kompiliert ein

    g++ *.cpp -c
    

    sowohl mit GCC 4.1 als auch GCC 3.3.5.



  • 😮

    Ich hab das auch mal einfach per Konsole erstellt:

    g++ *.cpp -c
    g++ -lGL -lSDL -lGLU *.o -o qm
    

    Keine Fehler und nix. Lässt sich starten, alles funktioniert. Hä?
    Also liegt es wohl an KDevelop!

    Danke für den Denkanstoß Ponto, hab vorher nie auch nur daran gedacht, dass es an der IDE liegen könnte. Ich muss nur noch rausfinden was genau KDevelop macht, damit das zustande kommt.



  • MAG schrieb:

    😮

    Ich hab das auch mal einfach per Konsole erstellt:

    g++ *.cpp -c
    g++ -lGL -lSDL -lGLU *.o -o qm
    

    Keine Fehler und nix. Lässt sich starten, alles funktioniert. Hä?
    Also liegt es wohl an KDevelop!

    Danke für den Denkanstoß Ponto, hab vorher nie auch nur daran gedacht, dass es an der IDE liegen könnte. Ich muss nur noch rausfinden was genau KDevelop macht, damit das zustande kommt.

    KDevelop ruft auch nur make auf. Du kannst mal ein make clean und dann ein make im Verzeichnis machen. Dann siehst du die ausgeführten Befehle und eventuell den Fehler.


Anmelden zum Antworten