Debug Asserton Failure



  • Hallo zusammen,

    versuche gerade in VC++ 6.0 einen Button direkt im Code zu erzeugen.
    Hab, denk ich, alles richtig gemacht.
    Fehlermeldungen bringt er mir beim Kompilieren auch nicht, aber wenn ich den Dialog starte, bekomme ich eine Fehlermeldung mit Debug Assertion Failure.

    Kann es sein, dass man einen Button nur über den grafischen Assistenten hinzufügen kann?



  • Drück wiederholen und zeig den Code.



  • Na gut, ist aber ziemlich viel:

    void CSpielereiDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CSpielereiDlg)
    	DDX_Control(pDX, ID_TEST_BUTTON, m_test_button);
    	DDX_Control(pDX, ID_VERIFY_BUTTON, m_verify_button);//der  Aergermacher   
    	DDX_Text(pDX, IDC_PASSWORD_INPUT, m_PASSWORD);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CSpielereiDlg, CDialog)
    	//{{AFX_MSG_MAP(CSpielereiDlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(ID_TEST_BUTTON, OnTestButton)
    	ON_WM_MOUSEMOVE()
    	ON_BN_CLICKED(ID_TRY_BUTTON, OnTryButton)
    	ON_EN_CHANGE(IDC_PASSWORD_INPUT, OnChangePasswordInput)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CSpielereiDlg Nachrichten-Handler
    
    BOOL CSpielereiDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.
    
    	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{	
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    	SetIcon(m_hIcon, TRUE);			
    	SetIcon(m_hIcon, FALSE);		
    
    	m_test_button.MoveWindow(30,30,40,50);
    	m_test_button.SetWindowText("Log In");
    	m_verify_button.MoveWindow(90,90,50,40); //Größenzuweisung
    	m_verify_button.SetWindowText("Bestätigen");
    
    	return TRUE;  
    }
    

    Und die Headerdatei:

    class CSpielereiDlg : public CDialog
    {
    // Konstruktion
    public:
    	CSpielereiDlg(CWnd* pParent = NULL);	// Standard-Konstruktor
    
    // Dialogfelddaten
    	//{{AFX_DATA(CSpielereiDlg)
    	enum { IDD = IDD_SPIELEREI_DIALOG };
    	CButton	m_test_button;
    	CButton m_verify_button;
    	CString	m_PASSWORD;
    	//}}AFX_DATA
    
    	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    	//{{AFX_VIRTUAL(CSpielereiDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstützung
    	//}}AFX_VIRTUAL
    
    // Implementierung
    protected:
    	HICON m_hIcon;
    
    	// Generierte Message-Map-Funktionen
    	//{{AFX_MSG(CSpielereiDlg)
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	afx_msg void OnTestButton();
    	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    	afx_msg void OnTryButton();
    	afx_msg void OnChangePasswordInput();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    


  • Sorry, das war ein Mißverständnis.
    Wo steht der grüne Pfeil, wenn du bei der Assertion "Wiederholen" drückst?

    Schau da mal rein: http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.html 🙂



  • Also er steigt genau an dieser Stelle aus:

    DDX_Control(pDX, ID_VERIFY_BUTTON, m_verify_button);//der neu hinzugefügte
    

    Hab ich irgendwo was vergessen zu deklarieren?



  • Hast du auch irgendwo ein new, Create(...) und ShowWindow(...) oder etwas vergleichbares zu deinem neuen, im Code erstellten Button ?

    [edit]...und vergiss auch nicht das zugehörige delete an passender Stelle und das Sternchen hinter CButton im Header.[/edit]


Anmelden zum Antworten