Socket Fehler



  • Hallo ich hab mal wieder was 😕
    ich schreib jetzt mal den Socket aus dem Buch C++ in 21Tagen
    Doch komm ich jetzt nicht weiter der Fehler ist :
    --------------------Konfiguration: Sock - Win32 Debug--------------------
    Kompilierung läuft...
    MySocket.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\Sock\MySocket.cpp(49) : error C2039: 'OnAccept' : Ist kein Element von 'CSockDlg'
    c:\programme\microsoft visual studio\myprojects\sock\sockdlg.h(15) : Siehe Deklaration von 'CSockDlg'
    C:\Programme\Microsoft Visual Studio\MyProjects\Sock\MySocket.cpp(57) : error C2039: 'OnConnect' : Ist kein Element von 'CSockDlg'
    c:\programme\microsoft visual studio\myprojects\sock\sockdlg.h(15) : Siehe Deklaration von 'CSockDlg'
    C:\Programme\Microsoft Visual Studio\MyProjects\Sock\MySocket.cpp(67) : error C2248: "OnClose" : Kein Zugriff auf protected Element, dessen Deklaration in der Klasse "CWnd" erfolgte
    c:\programme\microsoft visual studio\vc98\mfc\include\afxwin.h(2276) : Siehe Deklaration von 'OnClose'
    C:\Programme\Microsoft Visual Studio\MyProjects\Sock\MySocket.cpp(76) : error C2039: 'OnReceive' : Ist kein Element von 'CSockDlg'
    c:\programme\microsoft visual studio\myprojects\sock\sockdlg.h(15) : Siehe Deklaration von 'CSockDlg'
    C:\Programme\Microsoft Visual Studio\MyProjects\Sock\MySocket.cpp(85) : error C2039: 'OnSend' : Ist kein Element von 'CSockDlg'
    c:\programme\microsoft visual studio\myprojects\sock\sockdlg.h(15) : Siehe Deklaration von 'CSockDlg'
    Fehler beim Ausführen von cl.exe.

    Sock.exe - 5 Fehler, 0 Warnung(en)

    /////////////////////////////////////////////////////////////////////////////
    // Member-Funktion CMySocket 
    
    void CMySocket::SetParent(CDialog *pWnd)
    {
     // Elementzeiger setzen
         m_pWnd = pWnd;
    }
    
    void CMySocket::OnAccept(int nErrorCode)
    {
     // Sind Fehler aufgetreten?
         if (nErrorCode == 0)
             // Nein, OnAccept-Funktion des Dialogfelds aufrufen
             ((CSockDlg*)m_pWnd)->OnAccept();
    }
    
    void CMySocket::OnConnect(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
         if (nErrorCode == 0)
             // Nein, OnAccept-Funktion des Dialogfelds aufrufen
             ((CSockDlg*)m_pWnd)->OnConnect();
    }
    
    void CMySocket::OnClose(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
         if (nErrorCode == 0)
             // Nein, OnAccept-Funktion des Dialogfelds aufrufen
             ((CSockDlg*)m_pWnd)->OnClose();
    
    }
    
    void CMySocket::OnReceive(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
         if (nErrorCode == 0)
             // Nein, OnAccept-Funktion des Dialogfelds aufrufen
             ((CSockDlg*)m_pWnd)->OnReceive();
    
    }
    
    void CMySocket::OnSend(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
         if (nErrorCode == 0)
             // Nein, OnAccept-Funktion des Dialogfelds aufrufen
             ((CSockDlg*)m_pWnd)->OnSend();
    
    }
    

    --------------
    was muss ich da noch machen?



  • SChau dir mal das BSp. in VC++ 6 in 21 Tagen an. Da gibt es auch in der DlgKlasse diese Funktionen



  • Hallo
    ich hab noch einen Fehler in diesem Programm aber ich weiss jetzt nicht mehr weiter wie und wo da der Fehler ist ich bin 3 mal nach dem Buch gegenagen aber es geht nicht.
    Wer kann mir da Helfen muss ich noch was im klassen-Assi machen oder wo??
    -------------------------------------------------
    --------------------Konfiguration: socket - Win32 Debug--------------------
    Kompilierung läuft...
    MySocket.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\socket\MySocket.cpp(49) : error C2248: "OnAccept" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "CSocketDlg" erfolgte
    c:\programme\microsoft visual studio\myprojects\socket\socketdlg.h(58) : Siehe Deklaration von 'OnAccept'
    Fehler beim Ausführen von cl.exe.

    socket.exe - 1 Fehler, 0 Warnung(en)
    ------------------------------------------------------------------------
    wenn einer das Prog brauch um den Fehler zufinden ich kann es Ihm auch per mail senden
    Dank schon mal :p



  • Tag,

    Hmm ich würd sagen, dass die OnAccept-methode der Dialogklasse privat ist und dass du sie eben nicht aufrufen kannst da du kein Member und kein Freund der Klasse bist. Du must sie also als public deklarieren. Aber hilfreich wäre der Header der Dialogklasse.



  • also es ist aus der Buch c++ in 21 Tagen ( mach es aber jetzt schon länger :D)
    und in dem steht das es privat sein soll 😞
    das ist die Datei MySocket.cpp für den Fehler
    C:\Programme\Microsoft Visual Studio\MyProjects\socket\MySocket.cpp(49) : error C2248: "OnAccept" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "CSocketDlg" erfolgte

    // MySocket.cpp: Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "socket.h"
    #include "MySocket.h"
    #include "socketDlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CMySocket
    
    CMySocket::CMySocket()
    {
    }
    
    CMySocket::~CMySocket()
    {
    }
    
    //Die folgenden Zeilen nicht bearbeiten. Sie werden vom Klassen-Assistenten benötigt.
    #if 0
    BEGIN_MESSAGE_MAP(CMySocket, CAsyncSocket)
    	//{{AFX_MSG_MAP(CMySocket)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    #endif	// 0
    
    /////////////////////////////////////////////////////////////////////////////
    // Member-Funktion CMySocket 
    
    void CMySocket::SetParent(CDialog *pWnd)
    {
     // Elementzeiger setzen
         m_pWnd = pWnd;
    }
    
     void CMySocket::OnAccept(int nErrorCode)
     {
      // Sind Fehler aufgetreten?
           if (nErrorCode == 0)
               // Nein, OnAccept-Funktion des Dialogfelds aufrufen
               ((CSocketDlg*)m_pWnd)->OnAccept();
     }
    
    void CMySocket::OnConnect(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
          if (nErrorCode == 0)
              // Nein, OnAccept-Funktion des Dialogfelds aufrufen
              ((CSocketDlg*)m_pWnd)->OnConnect();
    }
    
    void CMySocket::OnClose(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
          if (nErrorCode == 0)
              // Nein, OnAccept-Funktion des Dialogfelds aufrufen
              ((CSocketDlg*)m_pWnd)->OnClose();
    }
    
    void CMySocket::OnReceive(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
          if (nErrorCode == 0)
              // Nein, OnAccept-Funktion des Dialogfelds aufrufen
              ((CSocketDlg*)m_pWnd)->OnReceive();
    }
    
    void CMySocket::OnSend(int nErrorCode)
    {
    // Sind Fehler aufgetreten?
          if (nErrorCode == 0)
              // Nein, OnAccept-Funktion des Dialogfelds aufrufen
              ((CSocketDlg*)m_pWnd)->OnSend();
    }
    

    und das ist

    // socketDlg.h : Header-Datei
    //
    
    #if !defined(AFX_SOCKETDLG_H__F0AE76CE_FE8F_4E4F_8731_874A9979A2E5__INCLUDED_)
    #define AFX_SOCKETDLG_H__F0AE76CE_FE8F_4E4F_8731_874A9979A2E5__INCLUDED_
    
    #include "MySocket.h"	// Hinzugefügt von der Klassenansicht
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    /////////////////////////////////////////////////////////////////////////////
    // CSocketDlg Dialogfeld
    
    class CSocketDlg : public CDialog
    {
    // Konstruktion
    public:
    	void OnClose();
    	void OnReceive();
    	void OnSend();
    	void OnConnect();
    	CSocketDlg(CWnd* pParent = NULL);	// Standard-Konstruktor
    
    // Dialogfelddaten
    	//{{AFX_DATA(CSocketDlg)
    	enum { IDD = IDD_SOCKET_DIALOG };
    	CListBox	m_stlSent;
    	CListBox	m_stlRecvd;
    	CButton	m_ctlConnect;
    	CString	m_strMessage;
    	CString	m_strName;
    	int		m_iPort;
    	int		m_iType;
    	//}}AFX_DATA
    
    	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    	//{{AFX_VIRTUAL(CSocketDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstützung
    	//}}AFX_VIRTUAL
    
    // Implementierung
    protected:
    	HICON m_hIcon;
    
    	// Generierte Message-Map-Funktionen
    	//{{AFX_MSG(CSocketDlg)
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	afx_msg void OnRType();
    	afx_msg void OnBconnect();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    private:
    	void OnAccept();
    	CMySocket m_sConnectSocket;
    	CMySocket m_sListenSocket;
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.
    
    #endif // !defined(AFX_SOCKETDLG_H__F0AE76CE_FE8F_4E4F_8731_874A9979A2E5__INCLUDED_)
    


  • Tag,

    Ich sehe im Moment keine andere Möglichkeit das zu lösen als OnAccept als public zu deklarieren.

    Vermutlich soll diese Funktion nur von MySocket aufgerufen werden können und nicht direkt über eine Instanz der Dialogklasse, was ich nicht nachvollziehen kann da z.B. OnClose auch als public deklariert ist.



  • hmm ich weiss das auch nicht aber ich kann es ja mal testen.
    also dann geht das ganze nicht 😞
    dann muss ich wohl mal sehn was ich da mach



  • ...oder so in der art 😉

    Ich nutze VC++ .Net in 21 Tagen und zufällig sehen die tutorials gleich aus
    und zufällig haben Davis und SAMS sich wohl gedacht wir uebernehmen den alten scheiss ohne zu schauen obs läuft!

    Ich habe auch probs mit der Lektion zu den Sockets! im buch fehlen einige dinge und nen Sample zu dem Tutorial habe ich auch net...

    hier kannst dir mal mein prob anschauen...

    http://www.c-plusplus.net/forum/viewtopic.php?t=85169
    MfG
    T1c4l



  • also ich hab es aufgegeben und schreib jetzt in PHP weiter.
    solte es bei dir mal laufen würde ich mich freun wenn ich auch mal eine info bekäme.
    Danke schon mal 🙄



  • Das ist IMHO ein Fehler im Buch.
    Mach es public.


Anmelden zum Antworten