tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
294
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    thetank Tutorials.de Gastzugang
    Hallo

    Wenn ich meine MFC exe erstellen möchte bekomme ich folgende Fehlermeldung:

    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'm_cEngelSpsThread'
    error C2501: 'CEngelSpsThreadMaster' : Fehlende Speicherklasse oder Typspezifizierer
    error C2501: 'm_cEngelSpsThread' : Fehlende Speicherklasse oder Typspezifizierer

    CEngelSpsThreadMaster ist eine von mir in einem .h file definierte Klasse !!

    Warum bekomme ich diese Errors und wie kann ich dieses Problem lösen?

    Bitte um Hilfe
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    3.991
    Kannst du uns auch den Code zeigen?
     

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi.

    Es wäre eine gute Idee gewesen deinen Code hier zu zeigen.

    Ich vermute mal du hast in der Headerdatei das abschließende Semikolon nach der Klassendefinition vergessen:
    Code cpp:
    1
    2
    
    class A {
    } ; // <-- Semikolon!
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    TheTank Tutorials.de Gastzugang
    Code :

    Klasse:

    class CEngelSpsThreadMaster
    {
    public:
    CEngelSpsThreadMaster();
    ~CEngelSpsThreadMaster();


    protected:
    CString m_strError;
    CIniEx m_cIniFile;

    CDatabase m_cDb;
    CStatement m_cSt;

    CSpsThrdMaster m_cSpsThrd;
    CEngelSpsThreadMaster m_cEngelSpsThread; //Diese Zeile verursacht den Error
     

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    3.991
    Na irgendwie musst du die Klasse mit }; auch wieder zumachen.
    Ausserdem ist es nicht so toll, in der Klasse ein Objekt von ihr zu definieren

    Weiters bitte [cpp][/cpp] Codetags verwenden
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von TheTank Beitrag anzeigen
    Code :

    Klasse:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    class CEngelSpsThreadMaster  
    {
    public:
        CEngelSpsThreadMaster();
        ~CEngelSpsThreadMaster();
     
     
    protected:
        CString m_strError;
        CIniEx m_cIniFile;
     
        CDatabase m_cDb;
        CStatement m_cSt;
     
        CSpsThrdMaster m_cSpsThrd;
        CEngelSpsThreadMaster m_cEngelSpsThread;  //Diese Zeile verursacht den Error
    Bitte verwende die Code-Tags!

    Das kann so nicht funktionieren. Du versuchst eine Klasse zu definieren die ein Attribut derselben Klasse enthält. Das würde eine unendliche Objekt-Hierarchie ergeben falls du wirklich so ein Objekt anlegen könntest.

    Du mußt m_cEngelSpsThread als Zeigervariable definieren.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    TheTank Tutorials.de Gastzugang
    Das sind zwei verschiedene h.files und auch zwei verschiedene Klassen und natürlich endet die Klasse mit };
    möchte jedoch nicht meinen ganzen Code posten, da es speziell nur um diese Problem geht
     

  8. #8
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    3.991
    Haben wir doch gesagt: Ein Objekt kann als Member kein Objekt der gleichen Klasse haben.
    Das hätte in sich nämlich wieder ein Objekt, dieses in sich wieder...unendlich weiter
     

  9. #9
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Zitat Zitat von TheTank Beitrag anzeigen
    [...] da es speziell nur um diese Problem geht
    Und genau dafür ist es nötig mehr Code zu sehen.
     

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von TheTank Beitrag anzeigen
    Das sind zwei verschiedene h.files und auch zwei verschiedene Klassen und natürlich endet die Klasse mit };
    möchte jedoch nicht meinen ganzen Code posten, da es speziell nur um diese Problem geht
    Es bringt doch nichts wenn du versuchst uns mit deinem Code übers Ohr zu hauen, damit schadest du dir nur selbst weil dir so niemand helfen kann.

    Verfasse deine Beiträge sorgfältig. Stelle soviele exakte Informationen wie möglich zur Verfügung. Poste deinen richtigen Code.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    TheTank Tutorials.de Gastzugang
    erstes h.file
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    
    #if !defined(AFX_BASETHRDWORKER_H__2F3F46E8_48D8_410A_AF63_A1CDE73DDDC0__INCLUDED_)
    #define AFX_BASETHRDWORKER_H__2F3F46E8_48D8_410A_AF63_A1CDE73DDDC0__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // BaseThrdWorker.h : Header-Datei
    //
     
    #include "SpsThrdMaster.h"              // ID 0..999
     
    #include "Utilities\Include\IniEx.h"
    #include "Utilities\Include\Logfile.h"
     
    #include "Utilities\Include\DBTime.h"
    #include "Utilities\Include\DBAccess.h"
     
    /////////////////////////////////////////////////////////////////////////////
    // Thread CBaseThrdWorker 
     
    class CBaseThrdWorker : public CWinThread
    {
        DECLARE_DYNCREATE(CBaseThrdWorker)
    protected:
        CBaseThrdWorker();           // Dynamische Erstellung verwendet geschützten Konstruktor
     
    // Attribute
    public:
        bool m_bInitDone;
        bool m_bInitOk;
        CStringArray* m_pError;
     
        short m_nDebugLevel;
        short m_nBlockSize;
     
    // Operationen
    public:
     
    // Überschreibungen
        // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
        //{{AFX_VIRTUAL(CBaseThrdWorker)
        public:
        virtual BOOL InitInstance();
        virtual int ExitInstance();
        //}}AFX_VIRTUAL
     
    // Implementierung
    protected:
        virtual ~CBaseThrdWorker();
        void SendDebugMsg ();
        bool SqlCmdError (int nCmd);
     
        void OnThreadQuit (WPARAM wParam, LPARAM lParam);
        void OnThreadMessage (WPARAM wParam, LPARAM lParam);
        void OnThreadKeepAlive (WPARAM wParam, LPARAM lParam);
     
        void OnThreadMessage_Sps (int nThread, CMessage* pMsg);
     
        void CheckConnections ();
        void CheckController (int nDataSet);
     
        // Generierte Nachrichtenzuordnungsfunktionen
        //{{AFX_MSG(CBaseThrdWorker)
        //}}AFX_MSG
     
        DECLARE_MESSAGE_MAP()
     
    //  void SendAllActiveDisplays ();
    //  void GetDisplayData (long nType, CString& strDspList, CString& strPortList, CString& strCmdList);
     
    //  void ScanForChangedContent (char nDspType);
    //  CString RetrieveLayoutDate (CString& strLink, long nController);
    //  void RetrieveLayoutFile (LPCTSTR lpLink, long nLayout, long nController);
     
    protected:
        CString m_strError;
        CIniEx m_cIniFile;
     
        CDatabase m_cDb;
        CStatement m_cSt;
     
        CSpsThrdMaster m_cSpsThrd;
        CEngelSpsThreadMaster m_cEngelSpsThread;
     
    private:
        CString m_strDatabase;
        CString m_strUser;
        CString m_strPswd;
        CString m_strType;
        CString m_strFile;
        long m_nConnectIv;
        long m_nRequestIv;
     
        CString m_strDb;
        CStringArray m_saConnected;
        CStringArray m_saToConnect;
        long m_nConnectTm;
        long m_nCtlScanTm;
    };
     
    /////////////////////////////////////////////////////////////////////////////
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.
     
    #endif // AFX_BASETHRDWORKER_H__2F3F46E8_48D8_410A_AF63_A1CDE73DDDC0__INCLUDED_

    2 h.file
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    // EngelSpsThreadMaster.h: Schnittstelle für die Klasse CEngelSpsThreadMaster.
    //
    //////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_ENGELSPSTHREADMASTER_H__B6D55413_E6A1_4CA0_A5F0_FE550EAB30BB__INCLUDED_)
    #define AFX_ENGELSPSTHREADMASTER_H__B6D55413_E6A1_4CA0_A5F0_FE550EAB30BB__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    #include "EngelSpsThreadWorker.h"
    #include "Utilities\Include\Tcpip\Message.h"
     
     
    class CEngelSpsThreadMaster  
    {
    public:
        CEngelSpsThreadMaster();
        ~CEngelSpsThreadMaster();
     
     
        short StartThread(CString& strData);
        bool StopThread (short nThreadId = -1);
        bool PostMessage (short nThreadId, WPARAM wParam, CMessage* pData);
        bool PostKeepAlive (WPARAM wParam, LPARAM lParam);
        bool IsActive (short nThreadId);
     
        void SetCommonParams(CWinThread* pMaster, CStringArray* pMessage, short nDbgLevel, long nRequestIv);
     
        short GetThread (CString& strData);
        CString GetData (short nThreadId);
     
    protected:
        CEngelSpsThreadWorker*  m_pChldThrd;
        CPtrArray               m_paChldThrd;
     
        CStringArray*           m_pErrorMsg;
        CWinThread*             m_pMasterThread;
        short                   m_nDebugLevel;
        long                    m_nRequestIv;
     
        CStringArray m_saCtlId;
    };
     
    /////////////////////////////////////////////////////////////////////////////
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.
     
    #endif // AFX_ENGELSPSTHREADMASTER_H__B6D55413_E6A1_4CA0_A5F0_FE550EAB30BB__INCLUDED_
     

  12. #12
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Das setzt zwingend voraus, dass überall immer der zweite Header vor dem ersten includiert wird. Besser wäre es die Klasse CEngelSpsThreadMaster im ersten Header vorwärts zu deklarieren und darin dann einen Zeiger darauf zu verwenden.
     

  13. #13
    TheTank Tutorials.de Gastzugang
    Danke hat mir geholfen hab den Fehler scho gefunden

    Danke
     

Ähnliche Themen

  1. Antworten: 19
    Letzter Beitrag: 11.02.10, 11:18
  2. Antworten: 1
    Letzter Beitrag: 30.04.09, 14:46
  3. Antworten: 14
    Letzter Beitrag: 18.03.09, 21:58
  4. Antworten: 2
    Letzter Beitrag: 11.01.08, 13:39
  5. Antworten: 28
    Letzter Beitrag: 12.09.07, 17:24