Fehler in der Objekt Init, aus dem ich nicht schlau werde



  • Guten Tag allerseits,

    ich hoffe ich finde hier ein bißchen Hilfe.

    Mein Problem sind folgende Fehler :
    test2dlg.h(54) : error C2146: syntax error : missing ';' before identifier 'm_sConnectSocket'
    test2dlg.h(54) : error C2501: 'CMySocket' : missing storage-class or type specifiers
    test2dlg.h(54) : error C2501: 'm_sConnectSocket' : missing storage-class or type specifiers
    test2dlg.h(55) : error C2146: syntax error : missing ';' before identifier 'm_sListenSocket'
    test2dlg.h(55) : error C2501: 'CMySocket' : missing storage-class or type specifiers
    test2dlg.h(55) : error C2501: 'm_sListenSocket' : missing storage-class or type specifiers

    VC++ tut so als würde er die Klasse CMySocket nicht kennen. Ich habe wirklich keine Ahnung, wo der Fehler liegen kann.
    Sollten noch weitere Files benötigt werden, reiche ich die natürlich soschnell
    wie möglich nach.

    Gruss,

    Proteus

    Anbei CMySocket.cpp und CTest2Dlg.h

    Erstmal die File, wo der Error vorkommt

    CTest2Dlg.h

    // test2Dlg.h : header file
    //
    
    #if !defined(AFX_TEST2DLG_H__1B7B694F_270B_4B90_9E3A_C3C0D6EBAB7A__INCLUDED_)
    #define AFX_TEST2DLG_H__1B7B694F_270B_4B90_9E3A_C3C0D6EBAB7A__INCLUDED_
    
    #include "MySocket.h"   // Added by ClassView
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    /////////////////////////////////////////////////////////////////////////////
    // CTest2Dlg dialog
    
    class CTest2Dlg : public CDialog
    {
    // Construction
    public:
        void OnReceive();
        void OnClose();
        void OnSend();
        void OnConnect();
        void OnAccept();
        int m_iPort;
        CTest2Dlg(CWnd* pParent = NULL);    // standard constructor
    
    // Dialog Data
        //{{AFX_DATA(CTest2Dlg)
        enum { IDD = IDD_TEST2_DIALOG };
            // NOTE: the ClassWizard will add data members here
        //}}AFX_DATA
    
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CTest2Dlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL
    
    // Implementation
    protected:
        HICON m_hIcon;
    
        // Generated message map functions
        //{{AFX_MSG(CTest2Dlg)
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    private:
        CMySocket m_sConnectSocket;  // ERROR !!!
        CMySocket m_sListenSocket;  // ERROR !!!
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_TEST2DLG_H__1B7B694F_270B_4B90_9E3A_C3C0D6EBAB7A__INCLUDED_)
    

    CMySocket

    // MySocket.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "Test2.h"
    #include "MySocket.h"
    #include "Test2Dlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CMySocket
    
    CMySocket::CMySocket()
    
    {
    
    }
    
    CMySocket::~CMySocket()
    {
    }
    
    // Do not edit the following lines, which are needed by ClassWizard.
    #if 0
    BEGIN_MESSAGE_MAP(CMySocket, CAsyncSocket)
        //{{AFX_MSG_MAP(CMySocket)
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    #endif  // 0
    
    /////////////////////////////////////////////////////////////////////////////
    // CMySocket member functions
    
    void CMySocket::SetParent(CDialog *pWnd)
    {
    
        m_pWnd = pWnd;
    
    }
    
    void CMySocket::OnAccept(int nErrorCode)
    {
    
       ((CTest2Dlg*)m_pWnd)->OnAccept();
    
    }
    
    void CMySocket::OnConnect(int nErrorCode)
    {
       ((CTest2Dlg*)m_pWnd)->OnConnect();
    }
    
    void CMySocket::OnClose(int nErrorCode)
    {
       ((CTest2Dlg*)m_pWnd)->OnClose();
    }
    
    void CMySocket::OnReceive(int nErrorCode)
    {
       ((CTest2Dlg*)m_pWnd)->OnReceive(); 
    }
    
    void CMySocket::OnSend(int nErrorCode)
    {
      ((CTest2Dlg*)m_pWnd)->OnSend(); 
    }
    


  • Wieso zeigst Du uns nicht 'mysocket.h' ?



  • ja klar.. sorry 😉 .. sicher...

    #if !defined(AFX_MYSOCKET_H__F5AA0330_99D7_4BF5_8700_535CA7AC11F2__INCLUDED_)
    #define AFX_MYSOCKET_H__F5AA0330_99D7_4BF5_8700_535CA7AC11F2__INCLUDED_
    
    #include "test2Dlg.h"   // Added by ClassView
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // MySocket.h : header file
    //
    
    /////////////////////////////////////////////////////////////////////////////
    // CMySocket command target
    
    class CMySocket : public CAsyncSocket
    {
    // Attributes
    public:
    
    // Operations
    public:
        CMySocket();
        virtual ~CMySocket();
    
    // Overrides
    public:
        void SetParent(CDialog* pWnd);
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CMySocket)
        //}}AFX_VIRTUAL
    
        // Generated message map functions
        //{{AFX_MSG(CMySocket)
            // NOTE - the ClassWizard will add and remove member functions here.
        //}}AFX_MSG
    
    // Implementation
    protected:
        virtual void OnSend(int nErrorCode);
        virtual void OnReceive(int nErrorCode);
        virtual void OnClose(int nErrorCode);
        virtual void OnConnect(int nErrorCode);
        virtual void OnAccept(int ErrorCode);
    private:
        CDialog* m_pWnd;
    };
    
    /////////////////////////////////////////////////////////////////////////////
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_MYSOCKET_H__F5AA0330_99D7_4BF5_8700_535CA7AC11F2__INCLUDED_)
    


  • wieoft willst du die Dialogklasse includen ?



  • hmmm.. ja.. eigentlich nur einmal *G*..
    denkst du das ist das problem ?



  • Ja sicher, deswegen fragte ich ja nach der mysocket.h !!!

    Sowas:

    // mysocket.h
    #include "testdlg.h"
    
    // testdlg.h
    #include "mysocket.h"
    

    funzt nunmal nicht. Wie auch? Stellt es doch eine 'Endlosschleife' dar!



  • ja danke.. hätte nicht gedacht, dass VC++ son scheiss macht



  • was kann vc++ dafür, wenn du nen fehler machst?



  • wenn du genau hinschaust, dann siehst du nen Kommentar // added by ClassView
    also doch nicht mein Fehler ..



  • Schon dein Fehler.
    Und zwar lücken im C++-Wissen.

    Ein Header soll man nur einmal includen.
    Deshalb gibt es dieses
    #pragma once

    bzw. oft verschiedene
    #ifdef
    #endif

    Will man eine Klasse einer anderen bekannt machen benutzt man in deinem Fall ein forwarddeklaration

    class Mysocket

    und der include kommt in die cpp

    Eine IDE kann dir nicht alle Arbeit abnehmen sonst könnte ja jeder Softwareentwickler werden.



  • manchmal habe ich wirklich das Gefühl jeder könnte das werden.

    Gut, man kann immer etwas dazu lernen .. danke trotzdem


Anmelden zum Antworten