[solved] Error: multiple types ....



  • Moin Moin,

    ich habe da ein kleines Problem und bin recht ratlos.
    Ich habe eine Checks Klasse, aber beim Kompilieren bekomme ich immer folgende Fehlermeldung:

    mingw32-g++.exe -Wall -pipe -mthreads -Winvalid-pch -D__GNUWIN32__ -D__WXMSW__ -DUSE_PCH -Wall -IE:\wxWidgets-2.6.2\include -IE:\wxWidgets-2.6.2\lib\gcc_lib\mswu -IE:\wxWidgets-2.6.2\contrib\include -IE:\wxWidgets-2.6.2\sqlite3\include -IE:\wxWidgets-2.6.2\lib\gcc_lib\mswu -IE:\wxWidgets-2.6.2\include -c src\server\checks.cpp -o .\obj\src\server\checks.o
    In file included from src\server\checks.cpp:1:
    src\server\/checks.h:31: error: multiple types in one declaration

    Der betroffene Code sieht folgendermassen aus:

    #ifndef __CHECKS_H__
    #define __CHECKS_H__
    
    #include "database.h"
    #include "thread.h"
    #include "client.h"
    #include "log.h"
    
    class Checks : public wxThread
    {
    public:
        Checks(Database* dbase);
        ~Checks();
    
        void checkForTimeout();
        void checkForNewOnlineClient();
        void checkForNewOfflineClient();
    
    protected:
        void connect(char* ip, unsigned int port);
        void sendMessage(char* msg);
        void disconnect();
    
        virtual void* Entry ();
        Database* database;
        Client *client;
    
    private:
    
    };
    
    #endif
    

    Das tolle ist, Zeile 31 ist diese Stelle "};"

    Das lustige ist, wenn ich die Anordnung der Includes verdrehe, dann bekomme ich eine ganz andere, und noch absurdere Fehlermeldung.
    Da behauptet der minGW sogar, dass die wxLibs Fehler enthalten 😮

    Welchen Grund kann mein Problem haben?
    Ich weiss nicht so recht an welcher Stelle ich suchen soll...

    MfG

    Vic



  • Kann es sein, dass wxThread nicht da ist? Wie sehen denn die anderen Header aus?



  • Doch wxThread ist da. Ich habe das nur in der Thread.h inkludiert

    Die Header sehen folgendermassen aus:

    #ifndef __DATABASE_H__
    #define __DATABASE_H__
    
    #include "CppSQLite3.h"
    #include "log.h"
    
    class Database
    {
    public:
        Database();
        Database(char* dbpath);
        ~Database();
    
        void open(char* dbpath);
        void close();
    
        bool exists(char* table);
    
        CppSQLite3Table query (char* command);
        void exec (char* command);
    
        bool is_locked();
    
    protected:
        CppSQLite3DB db;
        bool locked;
    
    private:
    };
    
    #endif
    
    #ifndef __THREAD_H__
    #define __THREAD_H__
    
    #include <wx/thread.h>
    
    static wxMutex *mutex;
    
    #endif
    
    #ifndef __CLIENT_H__
    #define __CLIENT_H__
    
    #include <wx/wx.h>
    #include <wx/socket.h>
    #include "log.h"
    
    class Client : public wxEvtHandler
    {
    public:
        Client();
        ~Client();
    
        void connect(char* ip, unsigned int port);
        void sendMessage(char* msg);
        void disconnect();
    
    protected:
        void OnSocketEvent(wxSocketEvent &event);
        wxSocketClient *client;
    
    private:
        DECLARE_EVENT_TABLE()
    
    };
    
    enum
    {
        CLIENT_SOCKET_ID = 300
    }
    #endif
    
    #ifndef __LOG_H__
    #define __LOG_H__
    
    #include <fstream>
    #include "wx/wx.h"
    #include "wx/datetime.h"
    
    using namespace std;
    
    class Log
    {
    public:
          Log();
          Log (wxString path);
          ~Log();
    
          int writefile (wxString message);
    
    protected:
          int openfile ();
          int closefile ();
    
    private:
          wxString get_logpath ();
          void set_logpath (wxString value);
    
    private:
          wxString logpath;
          ofstream logfile;
    };
    
    inline wxString Log::get_logpath ()
    {
      return logpath;
    }
    
    inline void Log::set_logpath (wxString value)
    {
      logpath = value;
    }
    
    void addLog(wxString message);
    void addLog(char* klasse, char* methode, char* message);
    
    #endif
    [code]
    
    MfG
    
    Vic
    


  • Hmm,
    bin ein bisschen weiter.

    Wenn ich alle Verbindungen zur client.h kappe, dann wird die checks.h richtig kompiliert...



  • Schau mal in der Clients.h, hinter dem enum {...} fehlt ein Semikolon. Enums sind auch Typen, für die gilt dasselbe wie für Klassen.

    (Und benutz bitte cpp statt code Tags)



  • ARGH!
    Danke das wars
    Und dieses Ding hat mich jetzt 3 h gekostet...

    MfG

    Vic



  • Was benutzt du auch globale Enums :p. Ich wette, wenn das in nem Namespace gewesen wäre, hätte der Compiler an "richtigerer" Stelle gemeckert.


Anmelden zum Antworten